次のように作成された、2 つのフィールドを持つ単純なキー値テーブルがあります。
CREATE TABLE `mytable` (
`key` varchar(255) NOT NULL,
`value` double NOT NULL,
KEY `MYKEY` (`key`)
);
キーは一意ではありません。テーブルには 100 万を超えるレコードが含まれています。特定のキーのすべての値を合計し、上位 10 個のキーを返すクエリが必要です。これが私の試みです:
SELECT t.key, SUM(t.value) value
FROM mytable t
GROUP BY t.key
ORDER BY value DESC
LIMIT 0, 10;
しかし、これは非常に遅いです。GROUP BY と SUM がなければ非常に高速ですが、ORDER BY がなければ非常に高速ですが、何らかの理由で 2 つの組み合わせが非常に遅くなります。なぜそうなるのか、またどのようにスピードアップできるのか、誰か説明できますか?
価値の指標はありません。作成してみましたが、役に立ちませんでした。
EXPLAIN EXTENDED は Workbench で以下を生成します。
id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE t index NULL MYKEY 257 NULL 1340532 100.00 "Using temporary; Using filesort"
テーブルには約 400K の一意のキーがあります。
クエリの実行には 3 分以上かかります。3分で止めたのでどのくらいかわかりません。ただし、キーのインデックスを削除すると、30 秒で実行されます。誰でも理由がわかりますか?