收集没有索引的表的统计信息

Posted

技术标签:

【中文标题】收集没有索引的表的统计信息【英文标题】:gathering statistics on tables without indexes 【发布时间】:2015-02-20 13:52:32 【问题描述】:

定期收集 Oracle 数据库中没有索引的表的统计信息是否有意义?我是从优化的角度问的。我假设总是对该表执行 FULL TABLE SCAN。

【问题讨论】:

如果您使用的是 Oracle 11g 或更高版本,那么 Oracle 会自动为您收集统计信息... 网络上有很多信息,所以我想用一个例子来解释一下。看我的回答。 即使除了使用全表扫描没有其他选择,它也是值得的。想象一下,您将这个表与其他表连接起来,并归档结果。优化器可以选择嵌套循环,也可以选择散列连接。但是如果整个哈希表都适合 RAM,则哈希连接会更有效。和这里的统计数据。可能有助于估计哈希表的大小。 @Ben,我明白了。您正在谈论自动优化器统计数据集合。你在生产系统上使用它吗?我不这么认为。 它不应该是你确保你的统计数据是最新的唯一方法@lalit,但你为什么使用自动统计收藏? 【参考方案1】:

是的,仍然值得收集统计数据。即使没有索引,关于行数和大小的信息对优化器也是有用的

【讨论】:

除了@Dave 所说的之外,还收集了其他信息,例如不同值的数量 (NDV)、数据的偏度(如果正在收集直方图)和高/低值。您可以为优化器提供的每一点帮助都不会浪费!【参考方案2】:

简而言之,统计数据对于优化器就像食物对于人类一样重要。如果你长时间不吃东西,你的大脑功能就会退化。

优化器对最新统计信息了解得越多,它可以决定的执行计划就越好。

让我试着用一个例子来解释一下:

假设您被要求在晴天到达特定目的地。但是,不会向您提供地图和位置信息。现在,可能有 N 种方法可以到达目的地,但如果没有正确的信息,您可能会选择最糟糕的方法。如果您足够聪明,您可能会问路,现在您可以从这里开始收集统计数据。试想一下,如果您在开始旅程之前就已经有了整个计划,也就是说,如果您可以收集所有统计数据,那么您就可以制定出最好的计划。

UPDATE看到一条关于自动优化器统计数据收集的评论。

是的,Oracle 11g Release 1 中当然有自动优化器统计集合。更多信息请查看here

【讨论】:

以上是关于收集没有索引的表的统计信息的主要内容,如果未能解决你的问题,请参考以下文章

oracle11g怎么不自动收集统计信息

SQL调优技巧:统计信息(文末福利)

oracle中的统计信息问题

Oracle里收集与查看统计信息的方法

并行和并发收集统计信息

oracle收集统计信息无法开并行