本稿ではオプティマイザ統計について、2分で読めるボリュームに要約して紹介します。
オプティマイザ統計とは
オプティマイザ統計とは、DBMSのオプティマイザが用いる統計情報を指しており、特に、RDBを利用しているシステムでSQLのチューニングを行う場合などに重要となる情報です。なんの統計情報なのかというと、対象となるDBMS全体の統計情報です。
オプティマイザというのは、DBMSの機能の一部であり、与えられたSQLに対して適切な実行計画を導き出す役割を担っています。適切な実行計画とは、最も性能の出る実行計画のことです。つまり、オプティマイザはオプティマイザ統計を使ってSQLの実行計画を選んでいる(作っている)といえます。
統計情報の種類
オプティマイザが利用する統計情報には以下の様なものがあります。
表統計情報
レコード数、ブロック数、レコードの平均長さなど
列統計情報
列内の個別値(NDV)数、NULL数、データの最小値/最大値、データ配分(ヒストグラム)など
索引(インデックス)統計
リーフ・ブロック数、レベル、クラスタ化係数
システム統計
サーバのI/O性能、CPU性能など
これらの情報をもとに、オプティマイザは、表の結合をどの順番で行うのが効率が良いか、スキャン方式はフルスキャンが良いのか、インデックススキャンが良いか、といったことを決定します。
統計情報の取得
テーブルに変更があった場合に最適な実行計画を選択することができるようにするため、統計情報は定期的に取得しておくことが重要です。
DBMSによっては自動的に統計情報取得を行う機能を持っており、例えばOracleであればデフォルトで日次で取得するよう設定されます。
他にも、表のTruncateで一気にデータを削除した場合やバルクロードで大量のデータをインポートした後などは手動で統計情報を取得しておくと良いでしょう。
まとめ
- オプティマイザ統計は、オプティマイザがSQL実行計画選択のために使う統計情報
- オプティマイザ統計には表統計、列統計、索引統計、システム統計などがある
- テーブルに大きな変更を加えた場合は手動で統計情報を取得すると良い
コメントを残す