【发布时间】:2013-02-15 07:37:58
【问题描述】:
我正在制作字典,我有两张表
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
但如果我只使用一个 Like ex。像“%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 的查询要花这么长时间。有没有更好的方法来做这个查询。我是不是做错了什么?
【问题讨论】:
-
使用
SELECT SQL_NO_CACHE * FROM ...测试您的查询,以确保查询缓存不会干扰。您可能可以通过使用单词 ID 而不是单词本身来连接表格来提高总体性能。 -
请在下面查看我的答案,它将提高您的查询速度,如果是正确答案,请接受它
标签: mysql join search sql-like