【发布时间】:2010-02-11 16:40:38
【问题描述】:
如果您希望相关性以及按相关性对结果进行排序,FULLTEXT 查询的常用格式是:
SELECT name, MATCH(name) AGAINST('Bob') AS relevance FROM users WHERE MATCH(name) AGAINST('Bob')
作为一名开发人员,我总是喜欢让我的代码干燥(不要重复自己)。有什么理由不把查询写成:
SELECT name, MATCH(name) AGAINST('Bob') AS relevance FROM users HAVING relevance > 0 ORDER BY relevance DESC
它似乎返回相同的结果,但我应该担心 ORDER BY 会导致查询变慢吗?这些查询是否等效?
指定MATCH() 两次不会降低性能,如 MySQL 手册中所述。
Natural Language Full-Text Searches
要达到这个结果,你应该 指定
MATCH()两次:一次在SELECT列表和一次在WHERE条款。这不会导致额外的 开销,因为 MySQL 优化器 注意到两个MATCH()调用是 相同并调用全文 只搜索一次代码。
【问题讨论】: