MySQL会缓存以前的查询部分吗?

时间:2012-07-14 12:16:30

标签: 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是否是LIKE'%input%'两次,或者它是否缓存了第一个结果(这很酷!)。 / p>

由于

1 个答案:

答案 0 :(得分:0)

抱歉,没有。

作为一个穷人的考试,请考虑:

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 |
+------+

虽然有人可以说这是一种特殊情况,但由于我们调用的是存储例程,而不是内置函数,因此目前没有区别。一切都被重新评估。

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