数据库统计有多大用处
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-树)以避免在其列中进行所有值扫描。
关于性能,通常所有的性能都来自索引,而统计数据只会帮助避免在查询执行的子步骤(执行计划)中出现错误。
【讨论】:
以上是关于数据库统计有多大用处的主要内容,如果未能解决你的问题,请参考以下文章