SQL Server 2005中的"创建统计信息"有什么作用?

时间:2020-03-06 14:40:22  来源:igfitidea点击:

建议数据库调优顾问在数据库中创建大量统计信息。我有点像SQL n00b,所以这是我第一次遇到这样的生物。 MSDN中的条目有点晦涩难懂,有人可以解释一下这到底是做什么的,为什么这是个好主意?

解决方案

简而言之,它为数据库的有效运行做好了准备。通过准备统计信息,数据库可以知道(在需要制定执行计划之前)最有效的途径是什么。

基本上只是使SQL更新具有的索引类型,行数等。这有助于SQL更好地估计如何执行查询。保持统计信息更新是一件好事。

从BOL ...

Creates a histogram and associated
  density groups (collections) over the
  supplied column or set of columns of a
  table or indexed view. String summary
  statistics are also created on
  statistics built on char, varchar,
  varchar(max), nchar, nvarchar,
  nvarchar(max), text, and ntext
  columns. The query optimizer uses this
  statistical information to choose the
  most efficient plan for retrieving or
  updating data. Up-to-date statistics
  allow the optimizer to accurately
  assess the cost of different query
  plans, and choose a high-quality plan.

优化器使用统计信息来确定是否对查询使用特定的索引。没有统计信息,优化器将无法知道多少行将匹配给定条件,从而导致它不得不针对"许多行"的情况进行优化,这可能不是最优的。

基于成本的查询优化是一种使用直方图和行数来启发式估计执行查询计划的成本的技术。当我们向SQL Server提交查询时,它会对其进行评估并生成一系列查询计划,并使用启发式方法估算这些计划的成本。然后,选择最便宜的查询计划。

查询优化器使用统计信息来计算查询计划的成本。如果统计信息丢失或者过时,则没有正确的数据来估计计划。在这种情况下,它可以生成中等或者高度次优的查询计划。

SQL Server将(在大多数情况下)自动生成大多数表和索引的统计信息,但是我们可以补充这些信息或者强制刷新。查询调整向导大概已在查询中找到一些缺失的统计信息或者已识别的联接,应为其添加统计信息。