0

シナリオ:

同じテーブル(インデックスなし/ PKなし/FKなし)の2つの異なるクエリに対して、同じ説明プラン(Tab Access Fullおよびコスト、バイト、カーディナリティの同じ数値)を取得しています。

クエリ1:

select * from tab1 where col1 = 'A'

クエリ2:

select * 
from tab1 
where col1 = 'A' 
and months_between(decode(col2,NULL,col3,col4),col5)<13;

質問:

Query2に追加された条件は、処理にもう少し時間が必要ではありませんか?
または 、 Query1
でさえQuery2と同じくらいの時間がかかります。これは、テーブル上のほとんどすべてのそのようなクエリに 必要な最大時間です(Tab Access Full)。

表(データ量は常に<0.5 mil)はこれまでのところパフォーマンスの問題を示しておらず、これはOracle COBが提供する説明プランを解釈するためのものであり、将来の拡張に役立つことに注意してください。

4

1 に答える 1

3

テーブルにインデックスがないと言います。したがって、オプティマイザはフルスキャンするしかありません。さらに、すべての列を選択しています(select *)。query2(主にフルスキャンのIO)のコストは非常によく似ており、追加の条件のためにCPUがわずかに追加される可能性があります。カーディナリティーは、オプティマイザーがクエリプランの各ステップで取得する行数です。同様に、バイト数は予想されるバイト数です。query1とquery2が同じ数の行を返している場合、つまり追加の述語が結果に影響を与えない場合、カーディナリティとバイト数はquery1とquery2で同じになります。それらが異なるはずだと思う場合は、テーブルの統計が最新であることを確認する必要があります。

于 2013-01-01T10:39:28.773 に答える