2008-09-24 76 views

回答

38

Cost Based Query Optimisation是一种使用直方图和行计数来启发式地估计执行查询计划的成本的技术。当您向SQL Server提交查询时,它会对其进行评估并生成一系列Query Plans,它使用启发式来估计成本。然后它选择最便宜的查询计划。

查询优化器使用统计信息来计算查询计划的成本。如果统计信息丢失或过期,则没有正确的数据来估计计划。在这种情况下,它可以生成适度或非常不理想的查询计划。

SQL Server将(在大多数情况下)自动生成大多数表和索引的统计信息,但您可以补充这些或强制刷新。查询调整向导大概会在查询中发现一些缺少的统计信息或已标识的联接,以便添加统计信息。

+0

最后一段在技术上的确如此正确:SQL Server不会自动创建一个持久索引(即`CREATE INDEX`),但它可以在“索引假脱机”中缓存一些数据,但这些数据不会在不同的查询执行之间共享。查看此QA:http://dba.stackexchange.com/questions/43772/why-dont-databases-create-their-own-indexes-automatically – Dai 2016-04-27 22:33:44

3

简而言之,它使您的数据库准备就绪,可以有效地工作。通过准备好的统计数据,您的数据库知道(在需要确定执行计划之前)什么可能是最有效的路线。

2

基本上只是保持SQL更新与你有什么类型的索引,行数等。这有助于SQL更好地估计如何执行您的查询。保持统计数据更新是一件好事。

2

从BOL ...

创建在 提供的列的直方图和相关联的 密度组(集合),或设定 表或索引视图的列。字符串汇总 统计信息也创建在 上构建在char,varchar, varchar(max),nchar,nvarchar, nvarchar(max),text和ntext 列上的统计信息。查询优化器使用这个统计信息来选择 用于检索的最有效计划或更新数据的 。最新的统计数据 允许优化器准确地 评估不同查询计划的成本,并选择一个高质量的计划。

8

优化程序使用统计信息来确定是否为查询使用特定索引。如果没有统计信息,优化程序无法知道有多少行可以匹配给定的条件,导致它必须针对“多行”情况进行优化,这可能不够理想。

相关问题