七、Oracle之索引

一、oracle索引原理(B-TREE索引:二叉树索引,默认情况下,我们建的索引都是此种类型)

一、原理

七、Oracle之索引
1)*一个B树索引只有一个根节点*,它实际就是位于树的最顶端的分支节点。可以用下图一来描述B树索引的结构。其中,B表示分支节点,而L表示叶子节点。

2)对于分支节点块(包括根节点块)来说,其所包含的索引条目都是按照顺序排列的(缺省是升序排列,也可以在创建索引时指定为降序排列)。

第一个字段表示当前该分支节点块下面所链接的索引块中所包含的最小键值;
第二个字段为四个字节,表示所 链接的索引块的地址,该地址指向下面一个索引块。

在一个分支节点块中所能容纳的记录行数由数据块大小以及索引键值的长度决定。
比如从上图一可以看到,对于 根节点块来说,包含三条记录,分别为(0 B1)、(500 B2)、(1000 B3),它们指向三个分支节点块。其中的0、500和1000分别表示这三个分支节点块所链接的键值的最小值。而B1、B2和B3则表示所指向的三个分支节点块的地址。

3) 对于叶子节点块来说,其所包含的索引条目与分支节点一样,都是按照顺序排列的(缺省是升序排列,也可以在创建索引时指定为降序排列)。

每个索引条目(也可以 叫做每条记录)也具有两个字段。
第一个字段表示索引的键值,对于单列索引来说是一个值;而对于多列索引来说则是多个值组合在一起的。
第二个字段表示键值所 对应的记录行的ROWID,该ROWID是记录行在表里的物理地址。

如果索引是创建在非分区表上或者索引是分区表上的本地索引的话,则该ROWID占用6个字节;
如果索引是创建在分区表上的全局索引的话,则该ROWID占用10个字节。

  sql:

  创建索引
  create index idx_emp1_ename on emp1(ename);
  创建唯一索引
  create unique index idx_uq_emp1_empno on emp1(empno) tablespace mypl;

二、索引优点和不足

索引缺点:
1:建立索引,系统要占用大约为表的1.2倍的硬盘和内存空间来保存索引。
2:更新数据的时候,系统必须要有额外的时间来同时对索引进行更新,以维持数据和索引的一致性——这就如同图书馆要有专门的位置来摆放索引柜,并且每当库存图书发生变化时都需要有人将索引卡片重整以保持索引与库存的一致。

索引优点:
1.在海量数据的情况下,如果合理的建立了索引,则会大大加强SQLS执行查询、对结果进行排序、分组的操作效率。
2.当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,降低了数据的维护速度。建立索引时一定要在“加快查询速度”与“降低修改速度”之间做好平衡,有得必有失,此消则彼长。