1

我正在研究 Oracle 10g 中的索引以加快特定查询。我一遍又一遍地读到索引低基数列(具有很少唯一值的列,例如员工表中的性别列)很少有助于加快查找速度。如果该低基数列中的数据是均匀分布的,则这是有道理的,例如约 50% 的员工记录的性别 = 'M',其他约 50% 的性别 = 'F'。但是,如果数据不是均匀分布的,并且您要搜索的记录与大多数记录的键不同,那该怎么办?如果对上面的性别列进行索引,员工表是针对一家有 2% 男性员工和 98% 女性员工的公司,我们只对男性员工进行查询。这种低基数的经验法则仍然成立吗?

我现在处理的情况是一个具有非空二进制列的表,每条记录总是存储 1 或 0。在这个表中,有 99,999 条记录为 0 和一条记录为 1。当我在这个二进制列上有一个 b 树索引时,Oracle 选择了全表扫描。

我想我不理解的部分是当大多数键是重复的时,b-tree 会是什么样子,以及为什么它不能快速找到一组不重复的少数记录。

4

1 回答 1

-2

担,

答案就在下面的问题中。Oracle 中存在哪些各种类型/种类的索引(例如)?

当存在具有更多冗余(低基数)的列时,位图索引是最佳选择。

例如,假设一个表的列名称为“Employee_status”.. Values (YES | NO) Select * from emp where Employee_Status='Regular';

如果您有 B-Tree 索引、哈希索引……除了位图索引,尽管使用过滤器和索引,这将很少有帮助。

谢谢 Prashant Dixit www.oracleant.com

于 2013-05-16T07:41:15.793 回答