标签归档:统计信息

mssql sqlserver sp_autostats 关键字简介说明


摘要:
下文讲述 sp_autostats 关键字的功能及用法说明,如下所示:
实验环境:sql server 2008 R2



sp_autostats 功能及语法说明

sp_autostats 功能:
显示或更改索引或统计信息的自动设置现象。
sp_autostats 语法说明:
sp_autostats [@tblname=] ‘table_name’
[,[@flagc=] ‘stats_flag’]
[,[@indname=] ‘index_name’]
——————-参数说明—————-
[@tblname =] ‘table_name’
待检测的表和视图名称,此处参数类型为nvarchar(776)
[@flagc =] ‘stats_flag’
此处参数输入 ON 或 OFF ,缺省输入时为NULL
[@indname =] ‘index_name’
此处缺省值为NULL
此处输入待启用或禁用的索引名称
——————返回值说明————–
0 代表操作成功
1 代表操作失败

sp_autostats 举例说明

  
 ---显示表"testTableName"下所有索引及统计信息是否开启自动统计
 ----和统计信息的最后更新时间
 EXEC sp_autostats testTableName
 
 ---启用表 testTableName 下所有统计信息自动统计功能
 EXEC sp_autostats testTableName, 'ON'
 
 ---禁用表 testTableName下所有统计信息自动统计功能
 EXEC sp_autostats testTableName, 'OFF'
 

 ---禁用表"testTableName" 下索引 IX_test的自动统计信息
  
EXEC sp_autostats testTableName,'OFF',IX_test 


注意事项:
运行此存储过程的用户,须具有 db_owner 和 db_ddladmin 服务器角色

mssql sqlserver统计信息的重要性


摘要:
在sqlserver中,统计信息的功能为帮助数据库引擎预估出正确的执行计划,
缩短sql运行时间,使sql运行更高效,下文将记录一次sql统计信息导致的异常


前几天,编写了一个数据抽取脚本,前一段时间还运行正常,最近运行时间突然超出所有人的预估,整整耗时10个小时,
开始我们以为是硬件发生了变化,通过仔细询问多方了解发现硬件最近几天没有发生任何变化,我们又对最近几天数据的增加量进行了
检查,发现最近数据增加也是按照要求在正常运行,在所有外部环境都没有发生大变化时,此时sql脚本执行慢,只能界定为sql server数据引擎内部出现异常,

最后我们整个数据库的统计信息进行了全部更新,第二天数据统计脚本,只用了10分钟就生成完毕。

通过这次的事件,让我认识到了统计信息对数据库引擎的重要性,统计信息的异常,会导致数据库执行时使用错误的执行计划,
预估错误的执行时间,导致很多不必要的开销和内存占用的错误估算,严重者会导致sql引擎宕机。
记录此信息,以后遇到数据库查询慢,先分析统计信息是否正确。

MSSQL自动统计信息


统计信息手动操作方式:
查看统计信息
DBCC SHOW_STATISTICS(‘表名’,’统计信息名’)
更新统计信息
UPDATE STATISTICS 表名[统计信息名]

mssql统计信息 如下图
MSSQL统计信息
mssql 统计信息生成方式:
1 自动生成统计信息
2 手动生成统计信息
3 自动异步生成统计信息
mssql统计信息的功能:
当MSSQL生成统计信息后,可以提供MSSQL查询分析器生成最优的查询方式。

统计信息简介:
1 统计信息
系统创建索引后,将会自动创建统计信息,
删除索引会使系统丢失统计信息[建立索引可以增加查询速度就是增加了系统的统计信息]
什么情况下统计信息会被丢失?
1 自动创建统计信息关闭 并且手工未创建统计信息(索引) —此时需要把MSSQL设置为 自动创建统计信息
Auto Create statistics on
2 表变量对查询的影响
对于采用表变量放置表数据,MSSQL不会维护统计信息,所以会影响查询速度,故在查询中如果出现大量缓存数据
最好使用临时表,而不是表变量
3 使用远程查询,也无法适用统计信息。
4 在查询字段中使用表达式 也会导致统计信息无法使用,使搜索效率变低
例 select * from table where year(d)=2015
5 筛选索引创建来分离统计信息

总结:
将数据库设置 自动创建和更新统计信息 true ,让MSSQL自动去维护.
mssql更新统计
过时或质量差的统计信息会导致MSSQL查询性能问题.