什么是“语句缓存”?

时间:2013-09-29 07:23:47

标签: java mysql sql

我从google和wiki上读到了“Statement Caches”,但我无法理解数据库中的“Statement Caches”,根据google“Statement Caches”的意思: -

  

调整数据库以执行语句缓存。他们通常包括一些   一种语句缓存。此缓存使用语句本身作为键   并且访问计划与相应的存储在缓存中   声明。这允许数据库引擎重用计划   先前已执行的语句。例如,如果我们发送   数据库中的语句如“select a,b from t where c = 2”,然后   计算的访问计划被缓存。如果我们发送相同的声明   之后,数据库可以重用以前的访问计划,从而节省了我们   CPU功率。但请注意,整个语句是关键。对于   例如,如果我们后来发送了语句“select a,b from t where c =   3“,它找不到访问计划。这是因为”c = 3“   与缓存计划“c = 2”不同。所以,例如:

   For(int I = 0; I < 1000; ++I)
    {
            PreparedStatement ps = conn.prepareStatement("select a,b from t where c = " + I);
            ResultSet rs = Ps.executeQuery();
            Rs.close();
            Ps.close();
    }
  

此处不会使用缓存。循环的每次迭代都发送一个   不同的SQL语句到数据库。计算新的访问计划   对于每次迭代,我们基本上都在使用CPU周期   这种方法。但是,请看下一个片段:PreparedStatement ps   = conn.prepareStatement(“从a中选择a,b,其中c =?”);

For(int I = 0; I < 1000; ++I) {
         ps.setInt(1, I);
         ResultSet rs = ps.executeQuery();
        Rs.close(); }
  

ps.close();这里效率会更高。发表的声明   数据库使用'?'进行参数化sql中的标记。这个   表示每次迭代都将相同的语句发送到数据库   具有不同参数的“c =?”部分。这允许数据库   重用语句的访问计划并制作程序   在数据库中更有效地执行。这基本上是让我们的   您的应用程序运行得更快或者为用户提供更多CPU   数据库。

但我无法理解这段代码请有人在这方面给我任何想法。

1 个答案:

答案 0 :(得分:1)

将SQL转换为实际操作需要花费时间和精力。通过注意给定SQL语句的结果,如果再次发出相同的SQL语句,则可以轻松地重用这些操作,从而为您提供更快的响应。

缓存是这些节省时间的集合。

准备好的声明是一种特殊的变体,为此设计了占位符。然后为每个请求提供占位符,而不必每次都重做“理解此SQL”部分。