2010-02-19 75 views
7

最近我一直在讓MySQL掛在特定的查詢上。我有一張有500,000多條記錄的表格。下面是該查詢正在運行:MySQL排序結果需要很長時間

SELECT * FROM items WHERE(itemlist_id = 115626)ORDER BY tableOrder DESC LIMIT 1

這裏是解釋:

| 1 | SIMPLE |物品| ALL | NULL | NULL | NULL | NULL | 587113 |在哪裏使用;使用filesort |

這裏是process_list項:

| 252996 | root | localhost | itemdb |查詢| 0 |排序結果| SELECT * FROM items WHERE(itemlist_id = 115642)ORDER BY tableOrder DESC LIMIT 1 |

任何想法可能導致此查詢花費10分鐘來處理?當我手動運行時,它會很快完成。 (1行中集(0.86秒))

感謝

+1

你確定這是排序很慢,沒有找到記錄?如果您在未編制索引的字段中獲得500k +記錄的表掃描,則可能需要一段時間。而且「手動」的速度可能是因爲MySQL(或操作系統)緩存了早期嘗試的數據並且運行得更快。 – 2010-02-19 16:18:10

回答

6

您需要在items (itemList_id, TableOrder)創建索引,並重寫查詢,一點點:

SELECT * 
FROM items 
WHERE itemlist_id = 115626 
ORDER BY 
     itemlist_id DESC, tableOrder DESC 
LIMIT 1 

ORDER BY的第一個條件似乎是多餘的,但它有助於MySQL選擇正確的計劃(不排序)。

+0

謝謝!我添加了索引和查詢,現在速度非常快。 – 2010-02-20 16:27:56

+0

可否請您提供您對查詢進行編輯的資源。理解爲什麼對我來說非常重要。 – TDSii 2011-09-03 01:56:09

+1

@TDSii:我根據「MySQL」文檔和我的經驗進行了編輯。 – Quassnoi 2011-09-03 19:49:20