MySQL是否缓存查询的以前部分?

MySQL是否缓存查询的以前部分?,mysql,caching,select,Mysql,Caching,Select,我有一个类似这样的查询: SELECT t1, t2, IF(MATCH(t2) AGAINST ('input*' IN BOOLEAN MODE), 10, 0) AS matches, IF(t2 LIKE '%input%', 2, 0) AS similar FROM tbl WHERE t2 LIKE '%input%' ORDER BY (matches + similar) DESC LIMIT 5 查询工作正常,但我关心的是MySQL是否两次检查t2是否与“%input%”类

我有一个类似这样的查询:

SELECT t1, t2,
IF(MATCH(t2) AGAINST ('input*' IN BOOLEAN MODE), 10, 0) AS matches,
IF(t2 LIKE '%input%', 2, 0) AS similar
FROM tbl
WHERE t2 LIKE '%input%'
ORDER BY (matches + similar) DESC
LIMIT 5
查询工作正常,但我关心的是MySQL是否两次检查t2是否与“%input%”类似,或者是否缓存第一个结果(这很酷!)

谢谢

对不起,没有

作为穷人的测试,请考虑:

delimiter //
create function qqq() 
returns int no sql 
begin 
  set @x:=@x+1; 
  return 17; 
end //
delimiter ;

set @x := 0;
select qqq(), qqq(), qqq() > 1, qqq() > 1 from dual;
+-------+-------+-----------+-----------+
| qqq() | qqq() | qqq() > 1 | qqq() > 1 |
+-------+-------+-----------+-----------+
|    17 |    17 |         1 |         1 |
+-------+-------+-----------+-----------+

select @x;
+------+
| @x   |
+------+
|    4 |
+------+
虽然有人会说这是一种特殊情况,但因为我们调用的是存储例程,而不是内置函数,所以目前没有区别。一切都要重新评估


这在将来可能会发生变化——没有什么可以严格阻止这种优化在众所周知的确定性函数上发生。但有时优化器可能很难诊断出这一点。

非常有趣-如果不是有点令人失望的话,呵呵。也许我将来会找到一种更好的查询方法,尽管现在,dual-LIKE comparator似乎可以快速/足够/完成它的工作。这是一个搜索建议框,响应是即时的。但是,我不理解这样做的必要性:
IF(t2像“%input%”,2,0)
在查询中始终是2,因为您根据该条件筛选行!是的,无可否认,这是一个相当糟糕的例子。这不是我要问的问题,我只是当场想到了。