1.统计信息建立的时机,
1.建立索引时, 自动为索引定义中的第一列创建统计.
2.AUTO_CREATE_STATISTICS=ON, 查询时自动在查询条件列上创建统计.
3.手动建立:
1.AUTO_CREATE_STATISTICS=ON,自动更新.
2.手动更新1:
3.手动更新2: sp_updatestats 全部更新,默认选择抽样更新.
1.数据仓库中,大量导入数据后,平时无DML变更,需更新.
2.执行计划中,Rows与EstimateRows差距较大的情况.
3.以下SQL语法中,rowmodctr(未更新统计的记录数)较大的情况.
select object_name(a.object_id) 'table_name',a.name 'stats_name', c.name 'col_name',e.rowcnt,e.rowmodctr,
case when auto_created=1 then 'auto_created' when user_created=1 then 'user_created' when e.rowcnt>0 then 'index_col' end stype
from sys.stats a
inner join sys.stats_columns b on a.object_id=b.object_id and a.stats_id=b.stats_id and b.stats_column_id=1
inner join sys.columns c on b.object_id=c.object_id and b.column_id=c.column_id
inner join sysobjects d on a.object_id=d.id and d.xtype='U'
inner join sysindexes e on a.object_id=e.id and a.name=e.name and e.name is not null
order by a.object_id
1.建立索引时, 自动为索引定义中的第一列创建统计.
2.AUTO_CREATE_STATISTICS=ON, 查询时自动在查询条件列上创建统计.
3.手动建立:
create statistics [统计名] on [表]([字段]) where [条件]
create statistics [统计名] on [表]([字段]) where [条件] with SAMPLE [百分比] PERCENT --按百分比抽样建立统计.create statistics [统计名] on [表]([字段]) where [条件] with SAMPLE [行数] ROWS --按指定行数抽样建立统计.
参考 http://technet.microsoft.com/zh-cn/library/ms188038.aspx
1.AUTO_CREATE_STATISTICS=ON,自动更新.
2.手动更新1:
update statistics [表名] with FULLSCAN --全表扫描.
update statistics [表名] with SAMPLE [百分比] PERCENT --按百分比抽样更新统计.
update statistics [表名] with SAMPLE [行数] ROWS --按指定行数抽样更新统计.
参考 http://technet.microsoft.com/zh-cn/library/ms187348.aspx3.手动更新2: sp_updatestats 全部更新,默认选择抽样更新.
3.查看统计详细信息
dbcc show_statistics ('[表名]','[统计名]')
1.数据仓库中,大量导入数据后,平时无DML变更,需更新.
2.执行计划中,Rows与EstimateRows差距较大的情况.
3.以下SQL语法中,rowmodctr(未更新统计的记录数)较大的情况.
select object_name(a.object_id) 'table_name',a.name 'stats_name', c.name 'col_name',e.rowcnt,e.rowmodctr,
case when auto_created=1 then 'auto_created' when user_created=1 then 'user_created' when e.rowcnt>0 then 'index_col' end stype
from sys.stats a
inner join sys.stats_columns b on a.object_id=b.object_id and a.stats_id=b.stats_id and b.stats_column_id=1
inner join sys.columns c on b.object_id=c.object_id and b.column_id=c.column_id
inner join sysobjects d on a.object_id=d.id and d.xtype='U'
inner join sysindexes e on a.object_id=e.id and a.name=e.name and e.name is not null
order by a.object_id