-2

我从 google 和 wiki 阅读了有关“Statement Caches”的信息,但我无法理解数据库中的“Statement Caches”,根据谷歌“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("select a,b from t where c = ?");

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

ps.close(); 在这里它会更有效率。发送到数据库的语句使用“?”参数化。sql中的标记。这意味着每次迭代都向数据库发送相同的语句,但“c=?”具有不同的参数。部分。这允许数据库重用语句的访问计划,并使程序在数据库内更有效地执行。这基本上让您的应用程序运行得更快或为数据库用户提供更多 CPU。

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

4

1 回答 1

1

将 SQL 转换为实际操作需要时间和精力。通过记录给定 SQL 语句的结果,如果再次发出相同的 SQL 语句给您更快的响应,则可以轻松地重用操作。

缓存是此类节省时间的集合。

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

于 2013-09-29T07:32:16.983 回答