2010-09-04 69 views
0

我試圖優化MySQL查詢其排序多VARCHAR列:對於小型數據庫優化LEFT JOINS ORDER BY多個VARCHAR列

SELECT * 
FROM tickets 
LEFT OUTER JOIN customers ON customers.id = tickets.customer_id 
LEFT OUTER JOIN locations ON locations.id = tickets.location_id 
ORDER BY customers.name, locations.name; 

的ORDER BY語句似乎花費很多的時間(〜100毫秒)約6000張門票,約40個顧客和約400個位置。

我已經減少了varchar列的長度,這大大加快了查詢速度(快兩倍)。

您是否有解決方案來優化查詢執行時間?

非常感謝!

+1

你有索引customer.name和locations.name?如果沒有,請添加它們並檢查這將如何加速查詢 – cichy 2010-09-04 10:46:54

回答

2

您應該在customers.namelocations.name列上有索引。

另外,確保customers.id,tickets.customer_id,locations.idtickets.location_id都被索引。

+0

在「CREATE INDEX名稱ON客戶(名稱)」和「創建索引名稱ON位置(名稱)」之後,ID被編入索引並且執行時間相同。奇怪? 「 – rudy 2010-09-04 10:58:28

+0

」ORDER BY customers.name,locations.name「不在同一個表中,不應該避免使用filesort和臨時表,是嗎? – Neo 2011-04-27 11:11:41