16
22

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Oracle】SQLヒントで実行計画を固定するときのポイント

Last updated at Posted at 2015-07-07

SQLヒントで実行計画を固定するときに意識するポイントは

  1. テーブルの結合順序
  2. テーブルの結合方法
  3. テーブルへのアクセス方法

の3つです。

#1.テーブルの結合順序

  • ORDEREDヒント または LEADINGヒント で結合順序を固定します。
  • 駆動表(最初にアクセスされているテーブル)がアクセスするテーブルの中で、
    もっとも件数が少なく絞り込めるテーブルとなっているかを見ます。
  • WHERE句の結合条件に従って適切な順序となったいるかを見ます。これが適切でないと直積が発生(実行計画では「MERGE JOIN CARTESIAN」が表示)します。

#2.テーブルの結合方法

  • USE_NLヒント(NestedLoop結合) または USE_HASHヒント(Hash結合)で結合方法を固定します。
  • (例外はありますが)、数百件程度に検索結果が絞り込めるような小規模の問い合わせでは
    NestedLoop結合を使用し、それ以上の大規模の問合せの場合にはHash結合を使用します。
  • 基本的には、一つの問合せ(SELECLT文)でいずれかの結合方法に統一されているのが望ましいです。

#3.テーブルへの走査方法

  • INDEXヒント(INDEX SCAN) または FULLヒント(TABLE FULL SCAN) でアクセス方法を固定します。
  • NestedLoop結合の場合にはINDEX SCANしているかどうかを確認します。
    このとき、実行計画で「INDEX FULL SCAN」とならずに「INDEX UNIQUE SCAN」「INDEX RANGE SCAN」となっていることを確認します。
  • Hash結合の場合にはFULL SCANしているかどうかを確認します。このとき、実行計画で「TABLE FULL SCAN」もしくは「INDEX FAST FULL SCAN」となっていることを確認します。

また、これらの3つのポイントを意識をして実行計画が適切かどうかを判断することも出来ます。
これらのポイントをはずしている実行計画をもつSQLは、統計情報の取得やヒント句の指定による実行計画を修正することによるパフォーマンス改善が必要な可能性が高いSQLといえます。

16
22
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
22

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?