- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个关于 View USER_TAB_COLUMNS(或等效项)中的 LOW_VALUE 和 HIGH_VALUE 列的问题。
我只是想知道这些值是否总是正确的,例如,如果您有一列 500k 行的值为 1、500k 行的值为 5 和 1 行的值为 1000,则 LOW_VALUE 应为 1(转换后原始图形)和 HIGH_VALUE 应为 1000(转换原始图形后)。但是,是否有任何情况下 Oracle 会“错过”这个离群值而 HIGH_VALUE 为 5?
另外,这两个值的目的是什么?
谢谢
最佳答案
与所有与优化器相关的统计信息一样,这些值是在表上收集统计信息时具有不同准确度的估计值。因此,完全可以预期它们会接近但不完全准确,并且完全有可能它们非常不正确。
收集统计信息时,指定应采样的行(或块)的百分比。可以指定 100% 的样本大小,在这种情况下,Oracle 将检查每一行,但要求接近如此大的样本大小的情况相对较少。要求更小的样本量(明确地或让 Oracle 自动确定样本量)效率更高。如果您的行样本碰巧不包括值为 1000 的一行,则 HIGH_VALUE
不会是 1000,HIGH_VALUE
假设这是样本看到的最大值,则为 5。
统计数据也是时间的快照。默认情况下,11g 将每晚收集自上次收集该对象的统计信息以来发生足够变化的对象的统计信息,以保证刷新统计信息,尽管您可以禁用该作业或更改参数。因此,如果您今天以 100% 的样本量收集统计数据以获得 HIGH_VALUE
1000 然后插入一个值为 3000 的行并且永远不会再次修改该表,Oracle 可能永远不会再次收集该表的统计信息(除非您明确要求它)并且 HIGH_VALUE
将永远保持 1000。
假设列上没有直方图(这是另一个完整的讨论),Oracle 使用 LOW_VALUE
和 HIGH_VALUE
估计特定谓词的选择性。如果LOW_VALUE
是 1,HIGH_VALUE
是 1000,表中有 1,000,000 行,列上没有直方图,您运行如下查询
SELECT *
FROM some_table
WHERE column_name BETWEEN 100 and 101
LOW_VALUE
相比,它为 Oracle 提供了关于列中数据分布的更多详细信息。和
HIGH_VALUE
提供。
关于performance - USER_TAB_COLUMNS 中的 LOW_VALUE 和 HIGH_VALUE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8719819/
我有一个关于 View USER_TAB_COLUMNS(或等效项)中的 LOW_VALUE 和 HIGH_VALUE 列的问题。 我只是想知道这些值是否总是正确的,例如,如果您有一列 500k 行的
我是一名优秀的程序员,十分优秀!