【发布时间】:2014-06-26 10:58:02
【问题描述】:
好的,很抱歉这个奇怪的标题,但我认为它涵盖了它。
我正在尝试提高我的简历搜索数据库的性能。 30,000 条记录并且还在增长,我们看到了一些性能问题。
我创建了一个减慢速度的字段索引,这是他们简历的正文(所有重复词和停用词都已删除)。
我为该字段创建了一个全文索引,它在像“DRILLER”这样的单字查询或像“DRILLER AND PAINTER”这样的两个单词查询上效果很好。我可以在 EXPLAIN 中看到索引正在触发,一切都很快 - 快乐的日子。
我的问题。当我执行搜索说“DRILLER OR CLEANER”时,索引不会触发,查询时间拖到 6 秒左右。我的 SQL 查询;
FAST - 使用索引
SELECT nl_id FROM CV
WHERE ( ( MATCH (nl_striptext) AGAINST ('driller' IN BOOLEAN MODE)
AND MATCH (nl_striptext) AGAINST ('cleaner' IN BOOLEAN MODE) ) )
SLOW - 索引未触发
SELECT nl_id FROM CV
WHERE ( ( MATCH (nl_striptext) AGAINST ('driller' IN BOOLEAN MODE)
OR MATCH (nl_striptext) AGAINST ('cleaner' IN BOOLEAN MODE) ) )
LIMIT 15 OFFSET 0
我在这里摸不着头脑,非常感谢您的帮助。
【问题讨论】:
-
是的,第二个查询中的 OR 子句正在杀死它,在这里查看一些解决方案,例如使用 UnION 等 stackoverflow.com/questions/2829544/… stackoverflow.com/questions/7110964/…
-
谢谢,这是一个有用的开始!
标签: mysql sql indexing full-text-search