是否有可能避免在MySQL查询中重复MATCH(...)AGAINST(...)?

时间:2014-06-03 21:01:49

标签: mysql

典型的MySQL FULLTEXT搜索如下:

SELECT * FROM table
WHERE MATCH(name) AGAINST("value")
ORDER BY MATCH(name) AGAINST("value");

是否有诀窍避免在MATCH(…) AGAINST(…)WHERE部分重复此ORDER BY

1 个答案:

答案 0 :(得分:2)

您可以将其放在select中,并在havingorder by子句中引用别名:

SELECT t.*, MATCH(name) AGAINST("value") as relevance
FROM table t
HAVING relevance > 0
ORDER BY relevance desc;

使用having而不使用group by是MySQL扩展。

编辑:如评论中所述,上述查询将对表执行全表扫描,而不是仅使用完整表索引来选择正确的行。当然,全表扫描仍然会使用全文索引,但它缺少这种索引的一部分(也许是重要部分)。