パフォーマンスチューニング初歩の初歩

以下のような記事を拝見しました。Oracleデータベースの6つの表アクセス方式の速度が比較されています。

私が移行やインターフェースののプログラムを構築する際に気をつけていたのは、最低限、テーブルフルスキャンを回避することでした。

そのためには

適切なインデックスが貼られており、

SQLにそのインデックスを使ってもらうこと、

に尽きるのですが、それ以外にもSQLの実行時間を最適化するためのコツを教わった時のメモを共有しておきます。


あとは件数が多いテーブルの処理を繰り返していると、表自体にゴミのようなものがたまって遅くなる(理論的にはよくわかっていません)ため、表の再編成(reorg)をすると容量も軽くなり処理が速くなることもあります。

あとはSQLが実行計画を作成するにあたり統計情報が適切にとられていることが必要です。データの投入や削除を重ねた後に統計情報を取得していないと、SQLが参考にする統計と実際のテーブルの中身が乖離してしまいます。統計情報を再取得することで改善することがあります。

SQLパフォーマンスチューニングのコツ

  • 使用しているテーブルと件数ボリュームを把握する
  • テーブルごとの絞り込み条件(WHERE句)を把握する
  • 件数ボリューム小さいものから順にアクセスパスを考える
  • 設定したアクセスパスに従うようSQLを組み立てる
    ーWith句
    ーTemp Table
    ーIndexの順序
    ーDB2のアドビスなどのアドバイザー情報も有用

参考書籍

こちらの書籍は古いですが、RDBMSの基礎に基づいたインデックスの本質などの解説が参考になります。

このブログを書いている人
電子書籍「システム導入のためのデータ移行ガイドブック」著者。 新卒から外資系コンサルティングファームに所属。15年に渡り販売物流、特にCRM領域のコンサルティングに従事。 100名を超えるプロジェクトのPMOなど全体を推進していく役回りや、ユーザ企業への出向を通じた実務経験を持つ。

このブログでは、自身がかき集めた知識や経験を共有する。クライアントへの提案やソリューション開発に直結しないガラクタのようなもの。将来再利用する自分のために。同じような悩みを抱える誰かのためにブログ「元外資系コンサルのガラクタ箱」を運営