这两个 MySQL 语句有什么区别(如果有的话)?如果我在
MATCH
子句中使用 WHERE
会有性能差异吗?还是没有必要?
SELECT `column`, MATCH(`column`) AGAINST ("searchterm") AS `rank`
FROM `table`
ORDER BY `rank` DESC;
并且
SELECT `column`, MATCH(`column`) AGAINST ("searchterm") AS `rank`
FROM `table`
WHERE MATCH(`column`) AGAINST ('searchterm')
ORDER BY `rank` DESC;
第一个示例运行表扫描。这必须检查表中的每一行,即使是那些与 AGAINST() 谓词中的模式不匹配的行。
第二个示例仅检查匹配的行(我假设您已经定义了全文索引)。
性能主要与检查的行成正比,因此第二个示例应该要好得多。