我有兩個領域,像這樣創建了一個簡單的鍵 - 值表:如何加快MySQL中緩慢的SUM + ORDER BY + LIMIT查詢?
CREATE TABLE `mytable` (
`key` varchar(255) NOT NULL,
`value` double NOT NULL,
KEY `MYKEY` (`key`)
);
的關鍵不是唯一的。該表包含超過一百萬條記錄。我需要一個查詢來總結給定鍵的所有值,並返回前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,它非常快,但由於某種原因,兩者的組合使它非常慢。任何人都可以解釋爲什麼這樣,以及如何加速?
沒有價值指數。我試圖創建一個,但它沒有幫助。
EXPLAIN EXTENDED產生在工作臺下面:
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秒內運行!任何人有任何想法爲什麼?
你有價值指數嗎? – Pete 2013-03-20 16:24:50
您能否爲我們提供該查詢的'EXPLAIN EXTENDED'輸出? – Adrian 2013-03-20 16:25:55
查詢將生成一箇中間表,然後對其進行排序。我懷疑緩慢的位是排序,雖然都不會很快。你有多少個獨特的鑰匙?您將無法有效地索引值,因爲您正在計算它作爲查詢的一部分。 – Jaydee 2013-03-20 16:31:34