【SQL Server】SQL Server の統計情報

■ はじめに

 統計情報についての説明などは、以下の記事を参照のこと。
http://blogs.yahoo.co.jp/dk521123/30561702.html

■ 手動で統計情報更新

テーブル個別

 UPDATE STATISTICS 【テーブル名】

テーブル個別(全行スキャン)

 UPDATE STATISTICS 【テーブル名】 WITH FULLSCAN

※ データ量に寄るが、かなり時間が掛かる

インデックス個別

 UPDATE STATISTICS 【テーブル名】  【インデックスID】

※ 時間が掛かるテーブルに対して、インデックス個別に更新する
※【インデックスID】については、「統計情報の更新状況を取得する」の「ss.name」の値が入る
サンプル : 「テーブル名:SampleTable1」「インデックスID:PK_SampleTable1」の場合
 UPDATE STATISTICS SampleTable1  PK_SampleTable1
http://msdn.microsoft.com/ja-jp/library/ms187348.aspx

データベース内の全テーブル

 sp_updatestats

■ 統計情報が自動更新になっているか調べる

1) SQL Management StudioのDBを右クリックをし、[プロパティ]-[オプション]を選択
2) 「自動」の以下がチェックされているかを確認する
 * 統計の自動更新
 * 統計の自動作成
※注意
 一見、自動で便利そうだが、バッチなどで大量にINSERTするような状況の場合、
オフにして、データ入力完了後に手動で統計情報を更新するほうがいい。

■ 統計情報の更新状況を取得する

http://engineermemo.wordpress.com/2012/04/19/%E7%B5%B1%E8%A8%88%E6%83%85%E5%A0%B1%E3%81%AE%E6%9B%B4%E6%96%B0%E7%8A%B6%E6%B3%81%E3%81%AE%E7%A2%BA%E8%AA%8D/
より抜粋

SELECT 
    so.name 
    , ss.name 
    , ss.auto_created 
    , ss.user_created 
    , ss.no_recompute 
    , STATS_DATE(ss.object_id, ss.stats_id) 
FROM 
    sys.objects AS so 
    LEFT JOIN 
        sys.stats AS ss 
    ON 
        ss.object_id = so.object_id 
WHERE 
    type = 'U'
      AND so.name = '【テーブル名】' -- 全てのテーブルについて調べたければ、この行は削除
ORDER BY 
    so.name

関連記事

SQL Server のパフォーマンスをあげることを考える

http://blogs.yahoo.co.jp/dk521123/28530905.html

統計情報について

http://blogs.yahoo.co.jp/dk521123/30561702.html