数据库统计有多大用处

Posted

技术标签:

【中文标题】数据库统计有多大用处【英文标题】:How useful is database statistics 【发布时间】:2014-04-22 04:11:26 【问题描述】:

就查询性能而言,数据库统计信息有多大用处?

我对 SQL Server 2014 查询进行了数据库引擎调优,它说我可以将查询处理提高 79%,建议创建 5 个统计信息和 1 个索引。

在性能方面,在这种情况下,与 1 个索引相比,5 个统计信息在百分比方面如何提高查询性能?

【问题讨论】:

【参考方案1】:

统计数据对于查询性能至关重要。没有它们,优化器只是猜测进入数据的路径的哪种排列将是最有效的。对每个表的每次访问都不会比表扫描好。

它们非常重要,以至于 SQL Server 会为即席查询动态创建它们。如果您执行SELECT * FROM MyTable WHERE ThisColumn = 'SomeValue',它将在ThisColumn 上创建统计信息。随着表格中的数据被修改,统计数据最终会变得“陈旧”。在这一点上,优化者往往会忽略它们并开始制定非常糟糕的计划。性能一落千丈。过去需要几秒钟的查询现在需要几分钟。

至于这些特定表的这 5 个统计信息 - 我无法说清楚。测试一下看看。但是请记住,没有免费的午餐。创建和维护统计信息需要 CPU、内存和 IO。它们越多,它们的开销就越大;很像索引。

这里有一个 good article 覆盖它。

【讨论】:

【参考方案2】:

简而言之,统计将创建这些列的值趋势摘要,而索引实际上会创建一些数据结构(通常是 B-树)以避免在其列中进行所有值扫描。

关于性能,通常所有的性能都来自索引,而统计数据只会帮助避免在查询执行的子步骤(执行计划)中出现错误。

【讨论】:

以上是关于数据库统计有多大用处的主要内容,如果未能解决你的问题,请参考以下文章

html 生成器类有多大用处? [关闭]

使用tushare获取股票实时分笔数据延时有多大

mysql 数据库可以有多大

考DBA难度有多大呢? SQLSEREVER 和ORACLE的!!

如何确定 .NET 中的数据类型有多大?

GET和POST可传递的值到底有多大