如何加快MYSQL FullText上的搜索或更改查询

时间:2017-09-06 07:54:38

标签: mysql full-text-search

我在MySQL中使用全文我需要在两个不同的表中选择两个字段 还有第一个表中名称字段的搜索优先级。这就是为什么我通过排序将结果乘以2。这是一个很好的古怪表演。但是有太多时间的问题,在某些情况下大约30秒。我应该做些什么更改来提高此查询的速度?

注意:

  

ft_stopword_file =“”

     

的ft_min_word_len = 1

     

每张表的记录数为200,000

查询:

$search="hello* my* name* in* prim* this* in* a* test*"

SELECT f.id, f.name FROM
Find f left join Movie m on f.`tID`=m.`id`
WHERE MATCH(f.`name`,m.`text`) AGAINST('$search' IN BOOLEAN MODE)
ORDER BY MATCH(f.`name`,m.`text`) AGAINST('$search' IN BOOLEAN MODE) +
(MATCH(f.`name`) AGAINST('$search' IN BOOLEAN MODE) *2) DESC , length(f.Address)
LIMIT 30

1 个答案:

答案 0 :(得分:0)

尝试将MATCH - ORDER BY以及WHERE中的SELECT移动到主$search="hello* my* name* in* prim* this* in* a* test*" SELECT f.id, f.name, MATCH(f.`name`,m.`text`) AGAINST('$search') as relevance1, (MATCH(f.`name`) AGAINST('$search') *2) as relevance2 FROM Find f left join Movie m on f.`tID`=m.`id` WHERE MATCH(f.`name`,m.`text`) AGAINST('$search' IN BOOLEAN MODE) ORDER BY relevance1 + relevance2 DESC , length(f.Address) LIMIT 30 字段列表中,以便稍后重复使用:

IN BOOLEAN MODE

上面的代码chuck 只是想法,我无法验证它运行没有错误,因为我没有你的架构+数据。所以,只需玩它,看看你是否可以使它工作。然后比较原始代码和此代码中的执行计划。我认为应该有性能提升。

另外,您不应该将ORDER BY用于IN BOOLEAN MODE中使用的相关性 如果你想获得真实的相关数据。如果匹配,WHERE将始终返回1.0的相关性。但是在IN BOOLEAN MODE我会在f.name中使用匹配。

HTH

PS。另一个想法是分别按m.textrelevance1计算匹配,然后构建正确的relevance2WHERE变量,并在ORDER BYrcycler_productlist.smoothScrollToPosition(0); 中使用它们}。