Oracle固有の情報を探しているので、OracleのAsk Tomブログをお勧めします。一般的に、アドバイスはクエリを調整しないことだと思います。オプティマイザが最適化できるクエリを作成する方法についての良いアドバイスが得られます。Oracleのドキュメントはオンラインですれており、通常、Oracleの最新情報を探しています。SQLServerを使用したことがないため、推奨事項はありません。
ここ数年、クエリの最適化の分野で新しいことはあまりありません。大きな変更点は、ルールベースのオプティマイザーの廃止です。ただし、SQLServerは依然としてルールベースのオプティマイザを使用しているので、そのルールを理解することが役立つことを理解しています。
クエリを編集して実行し、Explain Planを生成できるツールは、どのような変更によってクエリが適切に実行されるかを理解するのに役立ちます。私はAquaData Studioで良い結果を得ており、ツリービューが本当に気に入っています。SQL開発者も行う必要があります。
他の最適化と同様に、そのパフォーマンスに関する定量的なデータが必要です。次に、実際に最適化したかどうかを判断できます。
クエリを最適化する方法は、パーサーがクエリを構築して最適化する方法に一部依存します。これは、クエリするデータの分布に大きく依存します。Oracleデータベースでは、結果セットがテーブルの4%以上を構成し、ランダムに分散されている場合、通常、テーブルスキャンはインデックスより高速です。
私は開発者のチームのためにクエリを最適化するために取り組んできました。深刻な最適化が必要なのは、1年に2〜3回のクエリだけでした。ほとんどのクエリは、最適化を必要としないほど単純です。残りは通常、不足している結合パスを追加することで処理できます。
Oracleの場合、パフォーマンスに大きな影響を与える可能性のある3つの調整可能な設定があります。インデックスとデータルックアップのコストは相互作用して、インインデックスが使用される条件と使用されない条件を変更します。これら2つは、セッションごとに調整できます。多くの場合、デフォルトは最適ではありません。他の値は、オプティマイザが試行する代替の数を制御します。多くの場合、この値を増やすと役立ちます。
最適化は、データの分散と量に大きく影響されます。最適化する場合は、本番データベースのコピー、または少なくとも同じデータ分布とボリュームを持つデータベースを使用するのが最適です。テスト環境を大幅に破壊し、製造注文データベースのクエリを最適化しました。テストデータベースと開発データベースには、大幅に異なるデータ分布があり、データが大幅に少なくてもクエリが失敗しました。