Mysql - 不使用查询缓存的存储过程

时间:2009-10-16 10:30:14

标签: mysql optimization

我刚刚将SQL select语句转换为存储过程

SQL语句使用select语句 第一次运行0.4784s,之后运行0.0003s

存储过程每次运行需要0.4784秒。

我假设未使用查询缓存

我该如何纠正这个?

代码的简化版

SELECT * FROM  Venues WHERE  VenueName  = :TheVenue

=======

CREATE PROCEDURE  GetVenues
(
  TheVenue  VarChar(22)
)
BEGIN
    SELECT * FROM  Venues WHERE  VenueName  =   TheVenue 
END;

2 个答案:

答案 0 :(得分:2)

您可以尝试动态SQL存储过程,例如:

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;

手动没有MySQL服务器来测试语法,所以你可能需要调整它。

答案 1 :(得分:2)

欢迎使用MySQL ...在存储过程中获取任何内容以利用查询缓存非常困难。开发文章A Practical Look at the MySQL Query Cache详细讨论了这一点。参考文档hereMySQL Performance Blog上也提到了这些限制。

基本上,不依赖于在存储过程内执行的查询的缓存。虽然the first reference声称它是可能的,但几乎不可能让它工作。如果您使用存储过程来封装复杂的逻辑,这通常不是问题。我看到的大多数问题都是由于使用存储过程进行非常简单的查询而导致VIEW已经足够了。