私は、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 倍遅くなります。わずかな時間で結果セットを区別するコードをアプリケーションに入れることができます。これはどのように意味がありますか?特にクエリプランを変更せずに?