2010-12-04 43 views
3

查詢大,包括在WHERE子句中的「LIKE」測試一個長長的清單,如SELECT ... FROM可樂t WHERE(colX LIKE'word1%word2%'或colX LIKE'word3%word4%'OR ...);爲什麼一個MySQL選擇用「LIKE字%單詞2」 where子句不使用索引

COLX有一個索引。 mysql使用索引,因爲比較不是以'%'開始的。通過檢查EXPLAIN,我發現當SQL字符串變大時,mysql停止使用索引並開始進行全表掃描。這似乎與where子句中'LIKE'測試的數量有關。在門檻,我可以再添加一個'LIKE',並停止使用索引,並且比沒有額外'LIKE'的時間長10倍。

是否有控制這樣的行爲的一些MySQL的變量?

+1

如果你重寫查詢以什麼`UNION`!而非`或`s是否仍然得到同樣的行爲呢? – 2010-12-04 00:42:10

回答