左连接和几个LIKE使我的查询非常慢

时间:2013-02-28 22:31:34

标签: mysql join search sql-like

我正在制作一本字典,我有两张桌子

word (word, description, ext)
translate (id, word_translate, description_tranlate, org_word, language_id)

所有单词都没有翻译。我只想搜索'word'和'word_translated'。搜索结果应始终显示单词+已翻译(如果存在)。我的搜索查询如下所示。

SELECT * FROM word
LEFT JOIN translate ON (word=org_word AND language_id=?)
WHERE (word LIKE "%something%" OR translated_word LIKE "%something%")

查询时间:9.3350 sek

但如果我只使用一个像前。喜欢“%something%”

  SELECT * FROM word
    LEFT JOIN translate ON (word=org_word AND language_id=?)
    WHERE (word LIKE "%somethin%")

查询时间:0.0451 sek

只有* word_traslate LIKE *“%somethin%”

SELECT * FROM word
LEFT JOIN translate ON (word=org_word AND language_id=?)
WHERE (translated_word LIKE "%somethin%")

查询时间:0.0037 sek

为什么查询需要花费更长时间才能使用两个LIKE。有没有办法进行此查询。我做错了吗?

2 个答案:

答案 0 :(得分:3)

将WHERE ..中的条件移动到ON(..)

SELECT * FROM word
LEFT JOIN translate ON (word=org_word AND language_id=?  
AND (word LIKE "%somethin%" OR translated_word LIKE "%somethin%") )

答案 1 :(得分:0)

请注意,任何短语如LIKE '%something%'都必须进行表扫描(因为前导%)。在执行此操作之前尽可能多地进行过滤,并在执行此操作后尽可能多地进行连接,以减少表扫描对性能的影响。如果需要控制排序,请使用子查询。优化器会选择其中的一部分,但从来没有帮助它。