2011-05-02 236 views
1

我正在使用此查詢進行搜索,但查詢速度很慢。任何人都可以建議我爲這個查詢替代?查詢優化Mysql

SELECT c.ctgr_name,n.lgcode,n.newsID,n.newsTITLE,n.image3,n.ctgr_code 
FROM tbnews n LEFT JOIN tbcategory c ON c.ctgr_code=n.ctgr_code 
WHERE (newsTITLE LIKE "% Foray %" OR image3 LIKE "%Foray%" OR video3 LIKE "%Foray%" 
OR newsTITLE LIKE "% Foray %" OR image3 LIKE "%Foray%" OR video3 LIKE "%Foray%") 
AND (n.publish!=0) 
ORDER BY newsID DESC LIMIT 10 

回答

1

1)在詢問優化之前,總是運行EXPLAIN SELECT。在查詢之前粘貼「EXPLAIN」關鍵字,然後運行它--MySQL會告訴你它想做什麼,你會立即看到它被卡住的地方以及它不使用索引的地方。

2)使用LIKE'%%'搜索(在AND關鍵字之前帶有百分比符號)強制MySQL執行全表掃描。如果索引存在,使用像LIKE'關鍵字%'MIGHT這樣的搜索使MySQL使用該字段上的索引。

3)配置您的MySQL實例,調整配置並使用合適的存儲引擎可以大幅提升性能。默認情況下,MySQL被配置爲在非常慢的機器上工作並使用非常少的資源 - 因此,當表格變得稍大(比如,10萬行)時,人們會注意到性能下降。如果配置正確,MySQL可以輕鬆處理大型表。

+0

你可以告訴我這個查詢的替代者 – Deepa 2011-05-02 09:16:26

+0

請仔細閱讀我寫的內容,我想我用清晰的英文解釋了任何人都可以理解的信息。沒有更多的信息從你身邊 - 不,我無法進一步幫助你。 – 2011-05-02 09:24:08

+0

實際上,我在一個表中託管了一個擁有超過500000條記錄的網站。服務器管理員只爲上述查詢停止該站點。並且我認爲查詢不會造成這種類型的問題。我已經使用解釋,但我沒有發現任何問題。我在搜索領域使用索引。但我現在需要一個備用查詢。 – Deepa 2011-05-02 09:40:10

0

在非索引字段上使用LIKE "% Foray %"構造會使查詢速度下降很多。你擁有的數據越多,需要的時間就越多。

考慮添加一些關鍵字/標籤機制與索引字段,你會搜索英寸可能是一個額外的表。

+0

我使用幾乎所有的字段進行搜索。我可以索引所有這些領域嗎? – Deepa 2011-05-02 08:30:53

0

索引可能無助於LIKE「%Foray%」類型的搜索,因爲需要掃描數據庫中的每個字符串。

如果您正在搜索單個單詞,您可以將單個單詞提取到單獨的表中,您可以有效地編制索引並將其引回原始記錄。這將需要更多空間,但會提高速度。