我从 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。
但我无法理解这段代码,请有人给我任何想法。