sql >> データベース >  >> RDS >> Oracle

Oracleクエリでヒントを使用する場合

    ほとんどのヒントは、オプティマイザーに私たちの意図を伝える方法です。たとえば、leading あなたが言及するヒントは、この順序でテーブルに参加することを意味します 。なぜこれが必要なのですか?多くの場合、クエリの記述が不適切であるか、データベース統計が不正確であるため、最適な結合順序が明確でないことが原因です。

    したがって、leadingなどのヒントの1つの使用法 最適な実行パスを見つけてから、データベースがヒントなしでそのプランを選択しない理由を理解することです。新しい統計を収集することで問題は解決しますか? FROM句を書き直すことで問題は解決しますか?その場合、ヒントを削除して、ネイキッドSQLをデプロイできます。

    この難問を解決できず、本番環境でヒントを保持しなければならない場合があります。ただし、これはまれな例外です。オラクルには長年にわたって非常に賢い人々がたくさん働いてきたので、その決定は通常私たちよりも優れています。

    しかし、本番環境では点滅しないヒントが他にもあります。 append バルクインサートのチューニングにはしばしば重要です。 driving_site 分散クエリの調整に不可欠な場合があります。

    逆に、他のヒントはほとんどの場合悪用されます。はいparallel 、私はあなたのことを話している。盲目的に/*+ parallel (t23, 16) */ おそらくクエリの実行速度が16倍になることはなく、まれに遅くなることもありません。 シングルスレッド実行よりも取得。

    したがって、要するに、ヒントをいつ使用すべきかについて、普遍的に適用できるアドバイスはありません。重要なことは次のとおりです。

    1. データベースがどのように機能するか、特にコストベースのオプティマイザーがどのように機能するかを理解します。
    2. 各ヒントの機能を理解する;
    3. 本番環境と同等のデータを使用して、適切なチューニング環境でヒント付きクエリをテストします。

    明らかに、開始するのに最適な場所は、Oracleドキュメント<です。 / a> 。ただし、お金を使いたい場合は、コストベースのオプティマイザー あなたができる最高の投資です。



    1. 名前空間(、)で複数のテーブルが見つかりました-SchemaExtractionException

    2. 各部門の最初の2つの給与

    3. Pythonを使用してSQLスクリプト(Oracle)を自動的に順次実行するにはどうすればよいですか?

    4. SQLでのWITH句の使用に関するガイダンス