- 締切済み
oracle(SQL)のHINT指定について
性能問題について対応しています。 約2000万件のマスタと付随する各テーブルを結合して、検索条件に一致するデータを抽出するSQLを開発していますが、これらのパターン(曖昧検索:前方一致)において、前述の2000万件のマスタが駆動表となり、且つフルスキャンが走るものがあり、改善策を検討しています。 つきましては、HINT指定で駆動表を強制的に各テーブルに変更する方法(SQLのHINT指定内容)についてお教え願います。 →曖昧検索条件にもっとも絞られる対象のテーブルを駆動表とし、マスタテーブルはその駆動表とプライマリーキーで結合した形でアクセス(フルスキャンを避ける)ような実行計画となるSQLに改善をしようとしています。 以上です。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- k_o_r_o_c_h_a_n
- ベストアンサー率55% (526/942)
回答No.2
私なら、判りやすく・・ ORDERED オプション(FROMに書いたテーブルを左から右へ向かって結合) INDEX オプション (指定索引の利用を強要) でコントロールすることを試みます。
- k_o_r_o_c_h_a_n
- ベストアンサー率55% (526/942)
回答No.1
テーブルの構造やSQL、実行計画を見ずに、具体的なオプティマイザヒントの指定内容を示すことなど出来ません。 たぶん、頭の中に”理想的な実行計画”がイメージ出来ていて、それに近づけたいということだと思いますので、 オプティマイザヒントの指定の意味をマニュアルで読んだ方が速いんじゃないですかね。
質問者
補足
ありがとうございます。oracle8のマニュアルを見ましたがいまいち理解できません。 LEADINGオプションが該当しますかね?
補足
ORDERED オプションは、ルールベースの場合に有効と認識しています。私の環境ではCHOOSEモード(統計情報があり解析ができる場合はcostをベースとなる)なのです。 調査結果、LEADING指定、USE_NL指定で結合条件と駆動表を指定することで、2000万件のフルスキャンを回避、処理時間も大幅に短縮ができました。