索引未在新行上使用

时间:2011-06-22 19:09:46

标签: sql-server-2008 statistics sql-execution-plan

SQL Server 2008.我们有一个1 TB的数据库表(有一个带有图像数据的blob字段),在dateaccount number上有一个索引。

我们每天插入大约30k行。在搜索创建索引(或重建索引)之前存在的日期时,索引将在查询计划中正确使用。但是,搜索新行(自构建索引以来添加的行),它仅使用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 个答案:

答案 0 :(得分:1)

不,你不应该每天重建。

SQL可能会触发更新统计信息,但在此期间继续使用旧统计信息,因为更新需要一段时间。特别是在VLDB上。因此,自动更新可能正在实现它的工作,但由于缺乏资源或花费时间来获取更好的信息,优化器还无法利用它。

运行此选项以查看上次触发自动更新的时间

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

如果您的表仅批量获取更新。 (你一天提到30k行;那些是一次性的吗?)。 Microsoft建议不要在单个批处理中插入大量行的情况中使用自动更新,而是在之后插入很少甚至没有行来代替运行Update Stats with full scan。 (注意:这仍需要一段时间才能完成)