SQL Server统计信息(statistics)的总结

本文介绍SQL Server中统计信息的创建、更新方法及查看详细信息的技巧。涵盖了自动与手动创建统计的方式,包括不同抽样比例的使用,以及如何通过SQL语句进行统计更新。此外,还提供了判断是否需要手动更新统计的依据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.统计信息建立的时机,
 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


2.统计更新的时机,
 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.aspx

 3.手动更新2: sp_updatestats 全部更新,默认选择抽样更新.


3.查看统计详细信息

  dbcc show_statistics ('[表名]','[统计名]')


4.判断是否需手工更新统计的时机
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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值