- ベストアンサー
DB2 SQLチューニングでデータ量削減を試す方法
- DB2のSQLチューニングでデータ量削減が課題となっています。現在の処理ではCPU負荷が高く、SQLエラーが発生しています。DISTINCTを使用して複数テーブルを結合しているため、データ量が増えていると考えられます。データ量削減のために、SQLの改善方法を試していますが、いまひとつ効果がありませんでした。主に以下の方法を試していますが、改善されていません。
- 1. DISTINCTをやめて単純なSELECTのみとして、まとめはJavaロジックで実施する方法。しかし、SQLの重さが解消されていません。
- 2. 結合条件をサブクエリに変えて実施する方法。しかし、むしろ遅くなり、結果が返ってこなくなってしまいました。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
DB2が手元に無いので一般論的な事を・・・。 まず、SQLのチューニングをする場合、何はともあれ EXPLAIN は取りましょう。 http://www.atmarkit.co.jp/fdb/rensai/db2bestprac06/db2bestprac06_3.html EXPLAIN の結果を見て、時間が掛かっていそうな箇所を重点的に改善するのが良いでしょう。 なお、DB2で出来るかどうかは分かりませんが、EXPLAINにて各ステップの実際の実行時間が取れる機能があるなら、それを見るのが一番です。 SQLを修正する方向性としては、下記の様な点が挙げられるでしょう。 a. 大きなテーブルのシーケンシャルスキャンが起こらないように b. JOINは極力絞り込んでから c. ディスクソートが起きないように aを実現するためには結合や絞込みで極力INDEXを使うように書くことがポイントになるでしょう。 この質問のSQLについては、パッと見、A2TBL, A3TBL, A4TBL の NUMBER, MACHIN_ID, TYPE 辺りにインデックスを貼っておくと効果が有るかも知れません。 下記のページも参考になると思います。 http://www.geocities.jp/mickindex/database/db_optimize.html http://itpro.nikkeibp.co.jp/article/COLUMN/20070919/282395 http://itpro.nikkeibp.co.jp/article/COLUMN/20071012/284416 それから、~~~ LIKE '%' は無意味な気がするのですが・・・。もしかして IS NOT NULL の代わりですか?
お礼
回答が遅くなりまして申し訳ございません。缶詰状態でした; 結果的にかなり変更され、速度改善することができました。 DISTINCTはやはりネックでした。 また、インデックスの追加許可もあり何とか活路が開けました。 本当にありがとうございました。