2011-06-22 11 views
1

SQL Server 2008.インデックスがdateおよびaccount numberにある1 TBのデータベーステーブル(イメージデータを含むBLOBフィールドがあります)があります。新しい行にインデックスが使用されていません

1日あたり約30,000行を挿入します。索引の作成(または再構築)の前に存在した日付を検索する場合、索引は問合せ計画で適切に使用されます。ただし、新しい行(インデックスが作成されてから追加された行)で検索すると、PK Clusteredインデックスのみが使用されます。

私はこれで初めてですが、毎日インデックスを再構築する必要はありませんか?過去数日間(私はインデックスを再構築しているので)統計は更新されていないようですが、自動更新に設定されています。

CREATE NONCLUSTERED INDEX [IDX_ProcessDate_Account] ON [dbo].[tablename] 
(
    [Date] DESC, 
    [Account] ASC 
) 
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
GO 

答えて

1

いいえ、毎日再構築する必要はありません。

SQLは統計情報の更新をトリガすることがありますが、更新にはしばらく時間がかかるため、古い統計情報は引き続き使用されます。特にVLDB上で。だからAuto-Updateは仕事をしている可能性が高いですが、リソースの不足やより良い情報を得るための時間のために、オプティマイザはまだそれを利用することができません。あなたのテーブルにのみ、それはバッチでアップデートだ入った場合は、前回の自動更新が

DBCC show_statistics ('<yer table>', '<yer index>') WITH STAT_HEADER 

をトリガされたとき

実行これを確認します。 (あなたは一日に30kの行を言及します;それらは一度にすべてですか??)。単一のバッチに多数の行を挿入するシナリオでは、を入力し、の後に行がほとんどない場合はUpdate Stats with full scanを実行するように自動更新を使用することをお勧めします。 (注:これにはまだまだ時間がかかります)

関連する問題