收集没有索引的表的统计信息
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
【讨论】:
以上是关于收集没有索引的表的统计信息的主要内容,如果未能解决你的问题,请参考以下文章