ほとんどのヒントは、オプティマイザーに私たちの意図を伝える方法です。たとえば、leading
あなたが言及するヒントは、この順序でテーブルに参加することを意味します 。なぜこれが必要なのですか?多くの場合、クエリの記述が不適切であるか、データベース統計が不正確であるため、最適な結合順序が明確でないことが原因です。
したがって、leading
などのヒントの1つの使用法 最適な実行パスを見つけてから、データベースがヒントなしでそのプランを選択しない理由を理解することです。新しい統計を収集することで問題は解決しますか? FROM句を書き直すことで問題は解決しますか?その場合、ヒントを削除して、ネイキッドSQLをデプロイできます。
この難問を解決できず、本番環境でヒントを保持しなければならない場合があります。ただし、これはまれな例外です。オラクルには長年にわたって非常に賢い人々がたくさん働いてきたので、その決定は通常私たちよりも優れています。
しかし、本番環境では点滅しないヒントが他にもあります。 append
バルクインサートのチューニングにはしばしば重要です。 driving_site
分散クエリの調整に不可欠な場合があります。
逆に、他のヒントはほとんどの場合悪用されます。はいparallel
、私はあなたのことを話している。盲目的に/*+ parallel (t23, 16) */
おそらくクエリの実行速度が16倍になることはなく、まれに遅くなることもありません。 シングルスレッド実行よりも取得。
したがって、要するに、ヒントをいつ使用すべきかについて、普遍的に適用できるアドバイスはありません。重要なことは次のとおりです。
- データベースがどのように機能するか、特にコストベースのオプティマイザーがどのように機能するかを理解します。
- 各ヒントの機能を理解する;
- 本番環境と同等のデータを使用して、適切なチューニング環境でヒント付きクエリをテストします。
明らかに、開始するのに最適な場所は、Oracleドキュメント<です。 / a> 。ただし、お金を使いたい場合は、コストベースのオプティマイザーに関するJonathanLewisの本をご覧ください。 a> あなたができる最高の投資です。