应该将存储过程缓存在Mysql中

时间:2013-05-10 08:01:36

标签: mysql caching stored-procedures mysql-workbench

存储过程应该缓存在Mysql中吗?如果是,它会在缓存中保留多长时间?

在我的情况下,当我第一次调用一个存储过程时,它会在1秒内给出结果,之后它会给出400ms的结果。当我更改传递给存储过程的一些参数并第一次调用时,执行相同的行为。那么,我无法理解发生了什么?有人可以指导我吗?

感谢。

2 个答案:

答案 0 :(得分:2)

这是使用缓存的任何系统的正常行为:

  • 在第一次执行时,结果被加载到缓存中,因此出现了一个小的开销
  • 以下执行将花费更少,因为如果任何输入被更改(如在您的情况下:更改存储过程的某些参数),那么它们已经在缓存 BUT 中,然后是已经存在的结果缓存不再可行,因此新结果(使用已更改的输入)必须放在缓存中,这就是为什么需要更长的时间

您可以阅读更多here

答案 1 :(得分:0)

使用 您的程序中Deallocate

CREATE PROCEDURE GetVenues (TheVenue varchar(22)) 
BEGIN 
SET @s = 'SELECT * FROM Venues WHERE VenueName = ?'; 
SET @v = TheVenue;
PREPARE stmt1 FROM @s; 
EXECUTE stmt1 USING @v; 
DEALLOCATE PREPARE stmt1; 
END;

其他选项:RESET QUERY CACHE;

如果您正在运行的用户具有重新加载权限。或者,您可以通过以下方式对查询缓存进行碎片整理:

FLUSH QUERY CACHE;