我从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 数据库。
但我无法理解这段代码请有人在这方面给我任何想法。
答案 0 :(得分:1)
将SQL转换为实际操作需要花费时间和精力。通过注意给定SQL语句的结果,如果再次发出相同的SQL语句,则可以轻松地重用这些操作,从而为您提供更快的响应。
缓存是这些节省时间的集合。
准备好的声明是一种特殊的变体,为此设计了占位符。然后为每个请求提供占位符,而不必每次都重做“理解此SQL”部分。