2

オラクルのCBO(最近のバージョン)は非常に優れているため、可能な限り最悪の結合順序が指定されている場合でも、CBOは自動的に最良の結合順序を取ります。それで、ORDEREDのようなヒントは最近のバージョン(10,11)で何か良いことをしますか?CBOが最適な結合順序を見逃す可能性はありますか?ありがとう。

4

2 に答える 2

4

私の個人的な経験では、Oracle 10g / 11gでは、ヒントを使用してクエリを改善することはほとんどできません。ほとんどの場合、彼らはあなたが最適だと思う方法でより悪いパフォーマンスをすることがわかります。CBOは本当に劇的に改善されました。

特に複雑な構造の場合、クエリ変換機能にはまだいくつかの(非常にリモートの)制限がありますOUTER JOIN。これは、内部的に、ANSI構文が(+)演算子を含むいくつかの古風なOracle構造にマップされているためです。それ以外の、そして他の非常に遠いケースを除いて、私はもはやヒントは必要ないと思います。

SQLを書き直すか、制約/インデックスを追加することで、より適切に調整できます。もちろん、skaffmanが正しくコメントしたように、これらのことは、統計とヒストグラムが正しく、最新で、賢明である場合にのみ当てはまります。

于 2011-05-13T10:35:13.133 に答える
1

Oracle CBOの結果は非常に多くのパラメータに依存しているため、実際のシステムで結果の計画を予測することはほとんどできません。原則として、ヒントは使用しないことをお勧めします。確信が持てない場合は、ヒントを使用する必要があります。

私の経験からのヒントに関してORDEREDは、Oracleに結合の正確な順序を伝える必要があることはほとんどありません。

とにかく、見つけるための最良の方法は、自分でいくつかの実験を行い、試してみて、最良の解決策を選択することです:)

TomKyteのEffectiveOraclebyDesignを読むことをお勧めします。クエリの最適化とCBO​​の仕組みに関する非常に優れた章があります。

于 2011-05-13T10:39:17.110 に答える