[英]Left Join And several LIKE makes my query very slow
我正在写一本字典,我有两张桌子
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的时间更长。 有没有办法进行此查询。 难道我做错了什么?
将WHERE中的条件移动到ON(..)
SELECT * FROM word
LEFT JOIN translate ON (word=org_word AND language_id=?
AND (word LIKE "%somethin%" OR translated_word LIKE "%somethin%") )
请注意,任何短语如LIKE '%something%'
必须进行表扫描(因为前导%
)。 在执行此操作之前尽可能多地进行过滤,并在执行此操作后尽可能多地进行连接,以减少表扫描对性能的影响。 如果需要控制排序,请使用子查询。 优化器会选择其中的一部分,但是从来没有帮助它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.