位图索引的基数规则

use*_*003 5 oracle data-warehouse index-tuning bitmap-index star-schema

Oracle文档包括以下建议:

应该在事实表的每个外键列上建立位图索引

在该参考文献中,日期列甚至还有一个位图索引。使用位图索引的基数规则发生了什么变化?日期列最不符合该规则,但其他列customer_key也有点太大而不能被视为位图索引的候选者。item_key如果您没有数千件物品,我可以理解穿上一件。

如果不是位图索引,那么是什么 - 特别是对于具有时间维度外键的日期列 - 典型的东西 - 月,年,日等?显然,它经常被查询。

几天前我在 Stack Overflow 上问过这个问题,但我打算删除它,因为它没有收到回复。

Jus*_*ave 5

从来没有一条规则是位图索引只对具有相对较少不同值的列有用。这是一个神话,源于位图索引不适用于唯一或大部分唯一的列,并且您想要放置位图索引的许多列碰巧具有相对较少的不同值。

Richard Foote(他可能比这个星球上的任何其他人都更了解 Oracle 中的索引)有一篇关于位图索引的好文章,其中包含许多不同的值,详细说明了为什么这是完全合理和适当的。后续文章在具有许多不同值的列上比较位图和 b 树索引也很值得一读。