MySQL全文搜索按列排序

MySQL全文搜索按列排序,mysql,full-text-search,Mysql,Full Text Search,这个问题以前可能被问过,但我一生都找不到答案 为了避免 SELECT * FROM student WHERE name LIKE '%searchphrase%' ORDER BY score 据我所知,它永远不会使用索引,而是始终使用文件排序。它可以使用全文索引 问题:如果我执行全文搜索,如何在没有文件排序的情况下按分数排序?结果行将以全文索引中的任何顺序出现,这肯定不是按分数排序所要求的顺序,因此需要在单独的步骤中按排序,这就是filesort所做的 唯一的替代执行计划是按score顺序

这个问题以前可能被问过,但我一生都找不到答案

为了避免

SELECT * FROM student WHERE name LIKE '%searchphrase%' ORDER BY score
据我所知,它永远不会使用索引,而是始终使用文件排序。它可以使用全文索引


问题:如果我执行全文搜索,如何在没有文件排序的情况下按分数排序?

结果行将以全文索引中的任何顺序出现,这肯定不是
按分数排序所要求的顺序,因此需要在单独的步骤中按
排序,这就是
filesort
所做的

唯一的替代执行计划是按
score
顺序检索行,然后逐行应用全文匹配,这完全违背了任何特定于全文的优化

在您的情况下,有意义的可能是在
(分数、名称)
上有一个组合索引,并坚持使用
LIKE
,如果您的搜索表达式覆盖了大部分学生行,那么在这种情况下,您将得到
分数
顺序的索引扫描,并且可以在索引项上计算
LIKE
表达式。Sou您得到的是一个完整的索引扫描,而不是一个完整的表扫描,并且不需要额外的排序,因为索引项已经按
score
排序了


但是,如果与表中的总行数相比,匹配行数非常少,那么最好先进行全文索引查找,然后进行文件排序。

非常感谢您的回答,但使用文件排序真的可以吗?这使得我的服务器获得了很多打开的表,并且内存消耗正在急剧增加。我目前使用的“穷人”解决方案是对(分数、姓名)进行索引,并使用类似“短语%”的方法,允许使用索引,但它非常低,并且不是我的用户在使用搜索时所期望的。