SQL Server 中的表统计信息会影响 INSERT、UPDATE 性能吗?

Posted

技术标签:

【中文标题】SQL Server 中的表统计信息会影响 INSERT、UPDATE 性能吗?【英文标题】:Do table statistics in SQL Server affect INSERT, UPDATE performance? 【发布时间】:2012-07-12 15:24:02 【问题描述】:

我有一个关于 SQL Server 中表统计信息的一般查询。

上下文: 在我正在进行的一个项目中,我有几个正在使用的数据库 - 每个数据库都包含具有各自索引和约束的表。因此,我执行了几个测试用例,并使用 SQL Server Profiler 创建跟踪,以便可以将它们与 Tuning Advisor 一起使用来生成建议。顾问为我生成的唯一建议是一堆统计数据。

创建这些统计信息后,我测试了将 statistics io 设置为 on 的存储过程,我注意到逻辑读取有小幅改进。

问题: 我的问题是:插入了很多顾问为我生成的统计信息(每个表大约 3-4 个),这些统计信息如何影响 INSERT、UPDATE 或 DELETE 的性能?

【问题讨论】:

【参考方案1】:

如果有聚集索引,那么任何插入/更新/删除都需要进行基于索引的操作。这意味着统计信息可用于提高查询引擎确定如何插入/更新/删除行的能力。

我不能肯定地说它们是,但它们有可能提高性能。

然而,一个问题是,当表发生许多小更新时,统计信息可能不会更新;在自动更新它们之前,它需要超过一定数量的行。很多人都想看看这个。

【讨论】:

以上是关于SQL Server 中的表统计信息会影响 INSERT、UPDATE 性能吗?的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 执行计划利用统计信息对数据行的预估原理二(为什么复合索引列顺序会影响到执行计划对数据行的预估)

SQL Server 执行计划利用统计信息对数据行的预估原理二(为什么复合索引列顺序会影响到执行计划对数据行的预估)

Sql Server优化---统计信息维护策略

行计数估计未使用 SQL Server 2008 多列统计信息

如何从 SQL Server 中的表中获取行的索引?

SQL Server重建索引与重组索引会更新统计信息吗?