MySQL中MATCH在SELECT与WHERE子句的差异及性能对比
两条MySQL全文检索语句的差异、性能对比及必要性分析
一、核心功能差异
- 语句1:返回表内所有行,哪怕
column里完全不包含searchterm。它会给每一行计算匹配度得分rank,最后按得分降序排列——不匹配的行得分是0,会排在结果的最后面。 - 语句2:只返回
column中能匹配searchterm的行(得分大于0的行),同样计算匹配得分并排序。
二、WHERE子句使用MATCH的性能差异
性能差异主要取决于column是否创建了全文索引:
- 有全文索引时:语句2能直接利用索引快速过滤出匹配的行,不用扫描全表,数据量越大,性能优势越明显;语句1不管有没有索引,都得遍历全表计算每一行的得分,速度会慢很多。
- 无全文索引时:两条语句都会全表扫描,性能差距不大,但语句2会多做一次匹配计算(WHERE里算一次,SELECT里算一次),不过这个额外开销基本可以忽略。
三、WHERE子句使用MATCH的必要性
要不要加完全看业务需求:
- 如果你只需要展示和搜索词相关的结果(不需要显示完全不匹配的内容),那必须加——既符合业务逻辑,还能借助索引大幅提升查询速度。
- 如果你需要展示所有行,把相关内容排在前面、无关的放后面,那就不能加。
内容的提问来源于stack exchange,提问作者Colin R. Turner
相关产品推荐
相关产品推荐

