2013-05-10 135 views
3

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

在我的情况下,当我第一次调用一个存储过程时,它给了我1sec的结果,之后它给了我400ms的结果。当我改变传递给存储过程的一些参数并且第一次调用时,执行相同的行为。所以,我不明白发生了什么?有人能指导我吗?

谢谢。

回答

2

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

  • 在第一次执行的结果被装载在高速缓存中,从而通过少的开销出现
  • 以下执行将少得多,因为他们已经在缓存但是如果任何输入被改变(就像你的情况:改变存储过程的一些参数),那么已经在缓存中的结果不再可行,所以新结果(使用改变的输入)必须放在缓存中,这就是为什么它需要更长的时间

您可以将你的程序中阅读更多here

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;