【发布时间】:2010-09-12 18:57:46
【问题描述】:
数据库优化顾问建议我在我的数据库中创建一堆统计信息。我有点像 SQL n00b,所以这是我第一次遇到这样的生物。 MSDN 中的条目有点迟钝 - 有人能解释一下这到底是做什么的,为什么这是个好主意吗?
【问题讨论】:
标签: sql-server tsql statistics database-tuning-advisor
数据库优化顾问建议我在我的数据库中创建一堆统计信息。我有点像 SQL n00b,所以这是我第一次遇到这样的生物。 MSDN 中的条目有点迟钝 - 有人能解释一下这到底是做什么的,为什么这是个好主意吗?
【问题讨论】:
标签: sql-server tsql statistics database-tuning-advisor
简而言之,它使您的数据库做好了有效工作的准备。通过准备好统计数据,您的数据库(在需要确定执行计划之前)知道最有效的路径。
【讨论】:
基本上只是让 SQL 更新您拥有的索引类型、行数等。这有助于 SQL 更好地估计如何执行您的查询。不断更新统计数据是一件好事。
【讨论】:
来自 BOL...
创建一个直方图并关联 密度组(集合)在 提供的列或一组列 表或索引视图。字符串摘要 统计数据也创建于 基于 char、varchar、 varchar(最大值)、nchar、nvarchar、 nvarchar(max)、文本和 ntext 列。查询优化器使用这个 统计信息选择 最有效的检索计划或 更新数据。最新统计 让优化器准确 评估不同查询的成本 计划,并选择一个高质量的计划。
【讨论】:
优化器使用统计信息来确定是否为您的查询使用特定索引。如果没有统计信息,优化器就无法知道有多少行将匹配给定条件,导致它必须针对“多行”情况进行优化,这可能不是最优的。
【讨论】:
Cost Based Query Optimisation 是一种使用直方图和行数来启发式估计执行查询计划的成本的技术。当您向 SQL Server 提交查询时,它会对其进行评估并生成一系列Query Plans,并使用启发式方法来估算成本。然后它选择最便宜的查询计划。
查询优化器使用统计信息来计算查询计划的成本。如果统计数据丢失或过时,则没有正确的数据来估计计划。在这种情况下,它可以生成中等或高度次优的查询计划。
SQL Server 将(在大多数情况下)自动生成大多数表和索引的统计信息,但您可以补充这些信息或强制刷新。查询调优向导可能在查询中发现了一些缺失的统计信息或确定了应为其添加统计信息的联接。
【讨论】:
CREATE INDEX),但它可以在“索引假脱机”中缓存一些数据,但这些数据不共享在不同的查询执行之间。看到这个QA:dba.stackexchange.com/questions/43772/…