#前回から
統計情報とは。
表やインデックス、使用している領域、データの種類、データの分布等のデータ特性を表す情報のこと。
具体的には・・・・
・各テーブルのレコード数
・各テーブルの列数と列のサイズ
・列値のカーディナリティ(値の個数)
・列値のデータ分布(どの値がいくつあるかのヒストグラム)
・列内のNULLの数
・インデックス情報
このような情報を元にして、オプティマイザはどのような操作を行えば効率的に処理を実行できるかを判断している。
すごーい。
じゃぁ統計情報を元にオプティマイザが判断してくれればレスポンスはいつでも快適!
というわけにもいかない。
#じゃぁ統計情報の更新タイミングはいつなんだ
データの分布って、テーブル内のデータを更新するたびにかわるよね?
じゃあ何をトリガーに統計情報って変わるんだ。
###・手動で更新する
--コマンドを利用して更新する。
UPDATE STATISTICS Table1--[テーブル名]
--SQL Serverの備えられているストアドで更新する。
EXEC sp_updatestats;
###・自動で更新する
統計の自動更新オプション AUTO_UPDATE_STATISTICS がオンの場合自動で更新が走る。
(規定値はON)
条件自体は細かく色々あるらしい、概要では全体の20%のデータが変動すると自動更新が走る設定になっている。
20%というように割合で更新されるなら、データが多くなればなるほど、自動更新頻度が下がっていきそう。。。
###・インデックスの再構築を行う
長くなりそうなので、別記事でアップしようと思います!
#統計情報の更新状態の確認方法
統計情報が最後にいつ更新されたのかを確認する
SELECT
OBJECT_NAME(dsp.object_id)
, dsp.object_id
, ss.name
, dsp.last_updated
, dsp.rows
, dsp.rows_sampled
, dsp.steps
, dsp.unfiltered_rows
, dsp.modification_counter
FROM
sys.stats AS ss
CROSS APPLY
sys.dm_db_stats_properties(ss.object_id, ss.stats_id) AS dsp
WHERE
OBJECT_SCHEMA_NAME(dsp.object_id, DB_ID()) <> 'sys'
EXEC sp_updatestats;
#統計情報って簡単なようで難しい
一言で言ってしまえばテーブルの状態なのだが、各種設定だったり、正直ややこしい。
次回はインデックスの再構成について