3

Oracle スキーマ (Oracle バージョン 10) でリファクタリングを行っていますが、ヒントを使用する多くのビューが表示されます*+ALL_ROWS*/。他のビューには、他のタイプのヒントもあります。ヒントを使用する必要があるのはなぜですか? DBはクエリのベースで最良の選択をしませんか? どうもありがとう!

4

1 に答える 1

4

これは良い質問ですが、さまざまなアドバイスが適用されるさまざまなカテゴリのヒントがあるため、単一の答えはありません。http://docs.oracle.com/cd/E11882_01/server.112/e16638/hintsref.htm#PFGRF501

ALL_ROWSは最適化アプローチであり、結果セットの最初の行ではなく、最後の行をできるだけ早く取得することが目標であることを明確にするために、これを指定することは完全に有効です。多くの場合、オプティマイザーはとにかくクエリからそれを推測するので、冗長である可能性がありますが、正しく使用することで何も害を及ぼすことはありません。

次に、さまざまなカテゴリがあり、optimizer_features_enableなど、テストおよび調査用として特徴付けられるカテゴリもあります。おそらく、結合順序、アクセスパス、および結合操作に影響を与えるヒントは、アプリケーションでの使用が推奨されない場合があるため、このタイプです。ただし、オプティマイザは完全ではなく、完全な情報を持っていないため、修正が必要な不完全な情報に基づいて選択する場合があります。

いくつかのヒントは間違いなく有用で適切です。APPENDは、ダイレクトパス挿入を呼び出すための標準的な方法であるため、おそらく最良の例です。

結局、これについて一般的なアドバイスを与えることは本当に難しいです。実動コードで使用する必要があるかどうかに関して、実際にはすべてのヒントに対処する必要がありますが、オプティマイザーを理解し、検討しているヒントが実際に何をするのか、より良い代替案があるかどうかを理解している場合、たとえば、より良い統計、異なる初期化パラメータ、または動的サンプリング(それ自体がヒント)-独自の評価を行い、チャレンジされた場合にそれを防御することができます。

于 2013-01-25T16:13:52.300 に答える