有没有办法避免在查询中写两次表达式,例如我的示例中的表达式?
SELECT
MATCH(test) AGAINST("str" IN BOOLEAN MODE) AS testRelevance,
.......
FROM
mytable
WHERE
.......
MATCH(test) AGAINST("str" IN BOOLEAN MODE) > 0
我已经尝试过了
SELECT
MATCH(test) AGAINST("str" IN BOOLEAN MODE) AS testRelevance,
.......
FROM
mytable
WHERE
.......
HAVING
testRelevance > 0
但这对大桌子来说并不好(仅在某些情况下显然?)
提前谢谢
答案 0 :(得分:1)
使用派生表:
select *
from (
select MATCH(test) AGAINST("str" IN BOOLEAN MODE) AS testRelevance,
....
from ...
where ...
) as t
where testRelevance > 0
它应该与没有派生表的版本一样快,但是鉴于MySQL有限的查询优化器,您应该检查执行计划,看看MySQL是否确实可以将条件有效地推送到派生表中并使用索引。 / p>