聚类因子 - 关于如何计算的一个很棒的简单解释:
基本上,CF 是通过执行全索引扫描并查看每个索引条目的 rowid 来计算的。如果被引用的表块与前一个索引条目不同,则 CF 递增。如果被引用的表块与前一个索引条目相同,则 CF 不递增。因此,CF 给出了表中数据相对于索引条目的排序程度的指示(这些索引条目始终按照索引条目的顺序进行排序和存储)。CF 越好(越低),使用索引的效率就越高,因为需要访问更少的表块来通过索引检索必要的数据。
我的索引统计:
所以,这是我正在分析的索引(仅一列的索引)。
索引起始PK_
是我的主键,UI
是唯一键。(当然两者都有独特的价值)
查询1:
SELECT index_name,
UNIQUENESS,
clustering_factor,
num_rows,
CEIL((clustering_factor/num_rows)*100) AS cluster_pct
FROM all_indexes
WHERE table_name='MYTABLE';
结果:
INDEX_NAME UNIQUENES CLUSTERING_FACTOR NUM_ROWS CLUSTER_PCT
-------------------- --------- ----------------- ---------- -----------
PK_TEST UNIQUE 10009871 10453407 96 --> So High
UITEST01 UNIQUE 853733 10113211 9 --> Very Less
我们可以看到 PK 的 CF 最高,而其他唯一指数不是。
让我印象深刻的唯一合乎逻辑的解释是,下面的数据实际上是按唯一索引上的列顺序存储的。
1)我的理解正确吗?
2)有没有办法给PK,最低的CF
数字?
3)使用这两个索引查看查询成本,单次选择非常快。但是,CF 数字仍然让我们感到困惑。
该表相对庞大,超过 10M 记录,并且还接收实时插入/更新。
我的数据库版本是 Oracle 11gR2,超过 Exadata X2