一、oracle索引分类:
1、普通索引(使用B-TREE数据结构来存储)
2、唯一索引(列的值不能重复)
3、位图索引 (列值重复较多)
二、B树索引 (默认类型,具体是用B-,还是B*暂时不清楚 )
B树索引的结构如上图所示。每个索记录(如 )都是由多个索引条目(如 )组成的。
对于分支节点块(包括根节点块)来说,其所包含的索引条目都是按照顺序排列的(缺省是升序排列,也可以在创建索引时指定为降序排列)。每个索引条目(也可以叫做每条记录)都具有两个字段。第一个字段表示当前该分支节点块下面所链接的索引块中所包含的最小键值;第二个字段为四个字节,表示所链接的索引块的地址,该地址指向下面一个索引块。在一个分支节点块中所能容纳的记录行数由数据块大小以及索引键值的长度决定。比如从上图一可以看到,对于根节点块来说,包含三条记录,分别为(0 B1)、(500 B2)、(1000 B3),它们指向三个分支节点块。其中的0、500和1000分别表示这三个分支节点块所链接的键值的最小值。而B1、B2和B3则表示所指向的三个分支节点块的地址。
对于叶子节点块来说,其所包含的索引条目与分支节点一样,都是按照顺序排列的(缺省是升序排列,也可以在创建索引时指定为降序排列)。每个索引条目(也可以叫做每条记录)也具有两个字段。第一个字段表示索引的键值,对于单列索引来说是一个值;而对于多列索引来说则是多个值组合在一起的。第二个字段表示键值所对应的记录行的ROWID,该ROWID是记录行在表里的物理地址。如果索引是创建在非分区表上或者索引是分区表上的本地索引的话,则该ROWID占用6个字节;如果索引是创建在分区表上的全局索引的话,则该ROWID占用10个字节。
B-tree 特点 :
l 适合与大量的增、删、改(OLTP )
l 不能用包含OR 操作符的查询;
l 适合高基数的列(唯一值多)
l 典型的树状结构;
l 每个结点都是数据块;
l 大多都是物理上一层、两层或三层不定,逻辑上三层;
l 叶子块数据是排序的,从左向右递增;
l 在分支块和根块中放的是索引的范围(最小值);
三、位图索引
位图索引主要针对大量相同值的列而创建。拿全国居民登录一第表来说,假设有四个字段:姓名、性别、年龄、和身份证号,年龄和性别两个字段会产生许多相同的值,性别只有男女两种值,年龄,1到120(假设最大年龄120岁)个值。那么不管一张表有几亿条记录,但根据性别字段来区分的话,只有两种取值(男、女)。那么位图索引就是根据字段的这个特性所建立的一种索引。
每个字段的可取值(如blue,green,red,yellow)的位图值(1000100100010010100)的每一位代表了所在的记录行是否取当前值。如
<Blue,start rowid,end rowid,1000100100010010100>:1000100100010010100代表了第1、5,8,12,15,17行的索引列的值为blue。当然,这只是个示意,实际上每个位图的位数并非刚好等于记录数,而是会根据情况来分解,