0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

統計情報ってなんだ

Posted at

#前回から

統計情報とは。
表やインデックス、使用している領域、データの種類、データの分布等のデータ特性を表す情報のこと。
具体的には・・・・
・各テーブルのレコード数
・各テーブルの列数と列のサイズ
・列値のカーディナリティ(値の個数)
・列値のデータ分布(どの値がいくつあるかのヒストグラム)
・列内の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;

image.png

#統計情報って簡単なようで難しい
一言で言ってしまえばテーブルの状態なのだが、各種設定だったり、正直ややこしい。

次回はインデックスの再構成について

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?