我刚刚将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;
答案 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详细讨论了这一点。参考文档here和MySQL Performance Blog上也提到了这些限制。
基本上,不依赖于在存储过程内执行的查询的缓存。虽然the first reference声称它是可能的,但几乎不可能让它工作。如果您使用存储过程来封装复杂的逻辑,这通常不是问题。我看到的大多数问题都是由于使用存储过程进行非常简单的查询而导致VIEW
已经足够了。