我創建了一個包含100k行的測試表。此查詢的執行時間:如何阻止LIMIT放慢查詢速度?
SELECT id FROM table
是0.032s
。如果我添加一個GROUP BY
語句被索引爲Normal,BTREE
,執行時間用於查詢的整數列:
SELECT id FROM table GROUP BY indexedColumn
EXPLAIN輸出:
id | select_type | table | type | possible keys | key | key_len | ref | rows | Extra
1 SIMPLE [table] All [indexedColumnKey] null null null 105416 Using temporary; Using filesort
是0.073s
。由於GROUP BY
,執行時間增加了一倍,但我認爲這是正常的?這個問題我有,是爲什麼添加LIMIT
到查詢,像這樣:
SELECT id FROM table GROUP BY indexedColumn LIMIT 500
EXPLAIN輸出:
id | select_type | table | type | possible keys | key | key_len | ref | rows | Extra
1 SIMPLE [table] index [indexedColumnKey] [indexedColumnKey] 5 null 500 null
增加了執行時間0.301s
?這是一個超過4倍的放緩。
我對SQL非常不熟悉,所以也許這是完全正常的,但對於我來說,限制返回的行數會減慢查詢的速度,這似乎與此相反。
問題:
- 這是正常的嗎?
- 有沒有辦法阻止LIMIT放慢查詢速度?
您是如何評估這個的? – Nanne
如果你在查詢前添加Explain,你會得到這個計劃,懷疑它是在進行第二次排序來發現「第一個」500. –
@Nanne你的意思是執行時間?執行查詢後,我將它們從Navicat中取出。 – Nate