-2

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 誰かが私にこの行より上のアイデアを教えてください.

4

1 に答える 1

1

SQL を実際のアクションに変換するには、時間と労力がかかります。特定の SQL ステートメントの結果に注意することで、同じ SQL ステートメントが再度発行された場合にアクションを簡単に再利用でき、より迅速な応答が得られます。

キャッシュは、そのような時間節約ツールのコレクションです。

準備済みステートメントは、このために設計されたプレースホルダーを持つ特別なバリアントです。その後、毎回「この SQL を理解する」部分をやり直す必要なく、各要求に対してプレースホルダーが提供されます。

于 2013-09-29T07:32:16.983 に答える