2013-05-02 42 views
0

我正在實現文本框上的jQuery自動完成庫。 SQL查詢我在後端使用JOIN:jQuery AutoComplete - JOIN查詢數據庫

SELECT DISTINCT wcc.ItemCode, gwbo.ItemName FROM TBL1 gwbo 
INNER JOIN TBL2 wcc ON gwbo.ItemCode = wcc.ItemCode 
WHERE wcc.ItemCode LIKE '$term%' OR gwbo.ItemName LIKE '%$term%' 
AND wcc.CountStatus != 2 ORDER BY wcc.ItemCode LIMIT 0, 10 

這大約需要25秒鐘就可以自動完成框來填充和顯示。但是,當我刪除JOIN,只是查詢1個表中,自動完成顯示幾乎立即顯示(當然數據不準確)。爲什麼我的加入會如此激烈地放慢速度?我需要加入..有沒有辦法來加速我失蹤,還是我需要一個全新的實現?

回答

1

在MySQL中運行EXPLAIN以瞭解爲什麼JOIN需要這麼長時間,以及可以設置哪些索引以使其更快。

EXPLAIN SELECT DISTINCT wcc.ItemCode, gwbo.ItemName FROM TBL1 gwbo 
INNER JOIN TBL2 wcc ON gwbo.ItemCode = wcc.ItemCode 
WHERE wcc.ItemCode LIKE '$term%' OR gwbo.ItemName LIKE '%$term%' 
AND wcc.CountStatus != 2 ORDER BY wcc.ItemCode LIMIT 0, 10 

好像在ItemCode設置索引可以加快您的查詢。我建議添加它,然後再次運行EXPLAIN以查看數據庫是否正在使用新創建的索引。

此外,LIKE條件往往非常緩慢,因爲無論您在該列上設置了哪個索引,db都必須執行全表掃描。看看你能否以某種方式改變它。它可以是==而不是LIKE

+0

很酷,我會檢查出來並回復給你。我需要'LIKE'來爲用戶完成輸入,例如'Mor'輸入需要匹配'Moretti' – 2013-05-02 20:55:20

+0

哦,我的..索引正在使用..和..它的工作更快:)謝謝 – 2013-05-02 23:41:26