SQL Server 2008 では 初期設定では 統計情報の自動更新がONになっている。
以下の条件に該当した場合、統計情報は自動的に更新される

条件

  1. テーブル行数が0から非0に推移した
  2. 前回統計情報が更新された際のテーブル行数が500以下で、統計情報収集対象列が501回以上更新された場合
  3. 前回統計情報が更新された際のテーブル行数が501以上で、統計情報収集対象列が500+(テーブル行数の20%)回以上変更された
  4. 一時テーブルの場合は、上述の基準に加え、テーブル行数が6行を超えた

ただし、トレースフラグ「2371」がONの場合は、テーブル行数に比例してパーセンテージが変わる。
例えば、100,000 行が格納されているテーブルではしきい値は約 10%、1,000,000 行では約 3.2% となります。

変更の単位が、行ではなく「統計情報収集対象列」とあるのが やや微妙なところ。
たとえば、とあるテーブルの 統計に Name 列 しか含まない場合、Address列を更新しても、統計情報は更新されないことになる。

統計がPKである IDのみの場合は、updateがかかかることはないので、
insert / delete が 発生した場合のみが、カウントの対象になるというわけだ。

余談だが、過去の統計情報の更新履歴は残らないらしい。

手動更新方法

EXEC sp_updatestats; 

どれくらい更新されているかを確認する (2008 R2 SP1 / 2012以降)

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’

]

参考