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 执行计划利用统计信息对数据行的预估原理二(为什么复合索引列顺序会影响到执行计划对数据行的预估)