在更新统计信息之前,先说一下什么是统计信息,有什么作用。
统计信息其实就是表中的记录数、字段个数、每行数据占用字节数、某个字段中每一种值的个数等。
在一个sql通过语法检查、语义检查、权限检查后,sql优化器会用统计信息,来优化sql,生成多个执行计划,计算每个执行计划的cost(预估的),看哪个最小,就选择这个执行计划,接下来按照这个plan执行sql。
所以,如果统计信息不够准确,就会导致sql优化器误判,产生的执行计划不够最优,或者生产的cost不准确,最后反而选择了实际成本更高的,导致性能很差。
(1)那么,如何更新统计信息呢?
其实更新统计信息的语句特别简单:update statistics 表名
sql server会按照一定的百分比,扫描表中的数据,更新统计信息,而不会扫描整个表的所有数据。
(2)更新统计信息对系统有什么影响?
更新统计信息时,会对表加只读锁,所以会阻塞对表的修改操作。
不过,由于扫描数据的百分比很小,这个锁定过程持续的时间会很短,所以影响不大。
另外,更新统计信息后,会导致相关表的执行计划无效,之前编译缓存的存储过程如果再次执行,会被重新编译。