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("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 を使用できるようになります。
しかし、私はこのコードを理解できません pls 誰かが私にこの行より上のアイデアを教えてください.