まず、この質問の「初心者」のような性質についてお詫び申し上げます。私はスタック交換で他の多くの遅いサブクエリの質問を見ました、しかし私は私の問題に修正を適用する方法がわかりませんでした。私は、単純な選択、挿入などを超えて、SQLにかなり慣れていません。
さまざまなデバイスについて、5分ごとに結果をMySQLテーブル(trends_uint)に記録するプリンター監視システムがあります。デバイスID(itemid)、タイムスタンプ(clock)、および印刷されたページ(value_avg)をログに記録します。PhpMyAdminから、テーブルインデックスはitemidとclockの組み合わせであり、一緒にすると一意の値が得られると思います。これまでのところ、テーブルには約200万行あります。
私の質問は次のとおりです。
SELECT
tu1.itemid AS trends_uint_itemid,
tu1.clock AS time_value,
tu1.value_avg AS pages
FROM
trends_uint tu1
WHERE
(tu1.clock = (
SELECT max(tu2.clock)
FROM trends_uint tu2
WHERE tu1.itemid = tu2.itemid
)
)
ORDER BY tu1.clock DESC;
私がやろうとしているのは、各デバイス(itemid)の最新の値(つまり、最高クロックのvalue_avg)を選択することです。これにより、各プリンターがこれまでに印刷したページ数をグラフ化できるようになります。
次を返すクエリに対してEXPLAINを実行してみました。
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY tu1 ALL NULL NULL NULL NULL 1527815 Using where; Using filesort
2 DEPENDENT SUBQUERY tu2 ref PRIMARY PRIMARY 8 zabbix.tu1.itemid 115301 Using index
どんな助けでもいただければ幸いです。前もって感謝します。