以下のような記事を拝見しました。Oracleデータベースの6つの表アクセス方式の速度が比較されています。
私が移行やインターフェースののプログラムを構築する際に気をつけていたのは、最低限、テーブルフルスキャンを回避することでした。
そのためには
適切なインデックスが貼られており、
SQLにそのインデックスを使ってもらうこと、
に尽きるのですが、それ以外にもSQLの実行時間を最適化するためのコツを教わった時のメモを共有しておきます。
あとは件数が多いテーブルの処理を繰り返していると、表自体にゴミのようなものがたまって遅くなる(理論的にはよくわかっていません)ため、表の再編成(reorg)をすると容量も軽くなり処理が速くなることもあります。
あとはSQLが実行計画を作成するにあたり統計情報が適切にとられていることが必要です。データの投入や削除を重ねた後に統計情報を取得していないと、SQLが参考にする統計と実際のテーブルの中身が乖離してしまいます。統計情報を再取得することで改善することがあります。
SQLパフォーマンスチューニングのコツ
- 使用しているテーブルと件数ボリュームを把握する
- テーブルごとの絞り込み条件(WHERE句)を把握する
- 件数ボリューム小さいものから順にアクセスパスを考える
- 設定したアクセスパスに従うようSQLを組み立てる
ーWith句
ーTemp Table
ーIndexの順序
ーDB2のアドビスなどのアドバイザー情報も有用
参考書籍
こちらの書籍は古いですが、RDBMSの基礎に基づいたインデックスの本質などの解説が参考になります。
勝つDBエンジニアのキャリアパス (DB Magazine SELECTION)
posted with カエレバ
斎藤 直樹 翔泳社 2006-07-19