1

Oracle 12c データベースで SQL ステートメントを分析しています。数回実行すると、次のステートメントが改善されることがわかりました。2回、3回と実行することで改善されるとは、どのように説明できるでしょうか。

SELECT COUNT (*) 
  FROM asset
 WHERE     (    (    (status NOT IN ( 'x1', 'x2', 'x3'))
                 AND ( (siteid = 'xxx')))
            AND (EXISTS
                    (SELECT siteid
                       FROM siteauth a, groupuser b
                      WHERE     a.groupname = b.groupname
                            AND b.userid = 'xxx'
                            AND a.siteid = asset.siteid)))
       AND ( (assetnum LIKE '5%'));
  • 最初の実行: 24 秒。
  • 2 回目: 17 秒
  • 3回目:7秒
  • 4回目:7秒
  • 結果キャッシュを使用して調整: 0,003 秒。
4

2 に答える 2

4

デフォルトでは、Oracle はクエリの結果をキャッシュしませんが、クエリで使用されるデータ ブロックをキャッシュします。また、12c には「アダプティブ実行プラン」や「カーディナリティ フィードバック」などの機能があり、テーブル統計が再計算されていない場合でも、実行間に実行プランの変更を強制する可能性があります。

于 2016-10-11T14:24:56.817 に答える
1

Oracle はディスクからメモリにデータをフェッチします。クエリを 2 回目に実行すると、データはメモリ内にあるため、ディスクの読み取りは必要ありません。その結果、クエリの実行が高速になります。データベースは「ウォームアップ」されています。

于 2016-10-11T13:51:13.097 に答える