代码之家  ›  专栏  ›  技术社区  ›  Charles Faiga

mysql-存储过程不使用查询缓存

  •  1
  • Charles Faiga  · 技术社区  · 16 年前

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

    SQL语句use select语句接受 第一次运行0.4784s,之后运行0.0003s

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

    我想查询缓存没有被使用

    我该如何纠正?

    代码的简化版本

    SELECT * FROM  Venues WHERE  VenueName  = :TheVenue
    

    不受欢迎的=

    CREATE PROCEDURE  GetVenues
    (
      TheVenue  VarChar(22)
    )
    BEGIN
        SELECT * FROM  Venues WHERE  VenueName  =   TheVenue 
    END;
    
    2 回复  |  直到 16 年前
        1
  •  2
  •   D.Shawley    16 年前

    欢迎使用MySQL…在存储过程中很难获得任何内容来利用查询缓存。开发项目 A Practical Look at the MySQL Query Cache 对此进行了详细讨论。参考文件中也提到了这些限制。 here MySQL Performance Blog .

    基本上,不依赖于存储过程内部执行的查询的缓存。但是要让它工作几乎是不可能的 the first reference 是否声称这是可能的。如果使用存储过程来封装复杂的逻辑,这通常不是问题。我看到的大多数问题都是由使用存储过程进行非常简单的查询引起的,其中 VIEW 就足够了。

        2
  •  2
  •   Andomar    16 年前

    您可以尝试使用动态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服务器手动测试语法,因此您可能需要对其进行调整。