3

私は、Oracle 10 データベースで見ているものにかなり混乱しています。

次のクエリがあります。

select
t2.duplicate_num
from table1 t1, table2 t2,

( 
   select joincriteria_0 from intable1 it1, intable2 it2 
   where it2.identifier in (4496486,5911382) 
   and it1.joincriteria_0 = it2.joincriteria_0 
   and it1.filter_0 = 1 
) tt

where t1.joincriteria_0 = tt.joincriteria_0
and t2.joincriteria_1 = t1.joincriteria_1
and t2.filter_0 = 3
and t2.filter_1 = 1
and t2.filter_2 not in (48020)

私には特別なことのようには思えません。autotrace のベースライン パフォーマンスの数値は次のとおりです。

CR_GETS: 318

CPU: 3

行: 33173

ここで、「DISTINCT」キーワードをクエリに追加すると (たとえば、「select distinct t2.duplicate_num...」)、これが発生します。

CR_GETS: 152921

CPU: 205

行: 305

クエリ プランは変更されていませんが、論理 IO は 500 倍に増加しています。CPU のみが上昇し、論理 IO はほとんど変化しないと予想していました。

最終的な結果は、distinct キーワードを使用したクエリの実行速度が 10 ~ 100 倍遅くなります。わずかな時間で結果セットを区別するコードをアプリケーションに入れることができます。これはどのように意味がありますか?特にクエリプランを変更せずに?

4

1 に答える 1

0

これは、どこかでインデックスが不足していることを示しています。また、distinct 句のない元のクエリが最適化されていないことも意味します。「個別」でも最適化できなかったため、クエリプランは同じままでした。最適化されていないクエリは、完全なテーブル スキャンが原因で、パフォーマンスが大きく異なります。

于 2012-10-01T21:15:18.143 に答える