SQLのチューニング【SQL】SELECT文のチューニング方法まとめここではORACLEデータベースのSQLで、SELECT文をチューニングする方法を紹介します。SQLの実行計画の見方や確認方法については↓で紹介していますので参考にしてください。>>【ORACLE】SQLの実行計画の見方>>【ORACLE】SQLの実行計画を取得する方法SELECT文をチューニングする方法SELECT文をチューニングする方法を5つ紹介します。以降でより詳しく解説していきます。1.インデックスの作成SQLをチューニングする最も簡単な方法がインデックスの作成です。インデックスを作成することで、レコードの抽出にかかる時間を短縮することが出来ます。インデックスはSQLを変更する必要がないので、プログラムのコードを変更する必要もありません。インデックスの列にはWHERE句の条件で、抽出条件として書かれているものを書くと効果的です。詳しくは「【SQL】インデックスの項目の順番の正しい付け方」で解説してありますので参考にしてください。次のようなSELECT文の場合は、COL1列にインデックスを作成します。INDEX文で作成することが出来ます。index_tbs;インデックスが使用されると、フルスキャンからインデックスレンジスキャンへと実行計画が変化します。IX_table1_0012.ヒントの追加SQLは狙い通りに、効率良く実行されないケースがあります。次のようなケースです。・インデックスを作成したけど、インデックスが使われない・テーブルの結合順序が狙い通りにならない・たまに遅いときがある・急に遅くなる時がある原因は多岐に渡ります。次のようなことがあります。・統計情報が最新でない・SQLが複雑すぎるあまり、適切な実行計画が作成されない・データの増減によって、実行の都度、実行計画が変わってしまうこういったケースでは、ヒントが有効です。ヒントを書き足すことで、実行計画をある程度、狙い通りに変更することが出来ます。※ヒントは名前の通り、”ヒント”ですので、絶対に変更される訳ではありません。いくつか、ヒントのサンプルケースを紹介します。b.COL1※もちろん、複数のヒントを同時に利用することもできます。b.COL13.SQLの書き換えSQLの書き方は自由度が高く、結果として同じデータを抽出するSQLでも、書き方が異なるケースがあります。いった場合は、出来るだけ、効率よく、高速にデータを抽出できる書き方に変更しましょう。ここでは、代表的なものを紹介します。続いては、データベースサーバーのリソースを最大限に活用してチューニングする方法です。リソースに余裕があるのであれば、ORACLEのパラレル機能を活用してください。これはセッション単位もしくはSQL単位に実行することができ、ORACLEデータベースの内部的プロセスを使って、SQLでのデータ抽出を並列実行することが出来ます。※一歩間違えるとデータベースサーバー全体のリソースを消費しトラブルになりかねないので、お近くの上位SEやDBAに相談の上、利用してください。データの変更はほとんど発生しないが、オンライン処理などで何度も呼び出されるようなマスタなどは、予め、キャッシュにインプットしておきます。キャッシュからアウトプットされないように、設定しておくことができます。具体的には、バッファキャッシュ領域のうち、いくらかをKEEPバッファキャッシュ領域として割り当てます。対象となるテーブルの属性をKEEPにします。後は事前にSELECT文を実行するなどして、キャッシュにインプットします。※こちらもデータベースサーバのキャッシュサイズに関わる変更なので、導入検討する場合はDBAに相談してください。システムによっては、JAVA側でCACHEする仕組みもあると思います。データベース側での対応が必須ではありません。DEFAULTまとめSELECT文をチューニングする方法を5つ紹介しました。1.インデックスの作成2.ヒントの追加3.パラレル実行4.SQLの書き換え5.バッファキャッシュの活用SQLの遅い原因は多岐に渡ります。ある原因は↓で紹介していますのでぜひ参考にしてください。