繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM