3

特定の実行計画が一方の状況で強制され、もう一方の状況では強制されない理由を理解するのに苦労しています。例:

select min(COLUMN) from TABLE where FK_COLUMN = 1;

対。

select min(COLUMN) from TABLE where FK_COLUMN = 1 group by FK_COLUMN;

1つ目は、インデックススキャンを使用して実行プランを作成し、2つ目はスキャンをシークに置き換えます。さらに混乱を招くのは、これがテーブルのすべての列で発生するわけではないという事実です。一部の列では、シークを生成するためにgroupbyを必要としません。また、低速状態は特定の外部キー値でのみ発生していることにも注意してください。行を返さない値のみが返されますが、行を返さないすべての値が好ましくない計画を生成するわけではありません。何が得られますか?

4

1 に答える 1

1

@Robbie DeeOracle CBO によって選択された実行計画は、それが最良の方法ではなく、ほとんどの状況で最も最適化された方法であることを意味するため、私は同意します。また、実行計画は、列と行が格納される方法 (基本的にはテーブルのサイズ) に基づいて変更される可能性があります。

EMP_ID 列を主キーとする EMP テーブルを考えてみましょう。検索に主キー列を含めると期待INDEX RANGE SCANできますがFULL TABLE ACCESS、説明計画に入る可能性があります。これは、テーブルのサイズが小さすぎて主キーに基づく検索を実行する必要がないことがわかっているため、Oracle CBO によって選択されたデータ アクセス パスです。

ひ...

于 2012-11-20T07:23:17.857 に答える