oracle 索引

发表于:2013-08-08来源:博客园作者:虫师点击数: 标签:oracle
在关系数据库中,索引是一种与表有关的数据库结构,它可以使对应于表的SQL语句执行得更快。索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。

  在关系数据库中,索引是一种与表有关的数据库结构,它可以使对应于表的SQL语句执行得更快。索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。

  对于数据库来说,索引是一个必选项,但对于现在的各种大型数据库来说,索引可以大大提高数据库的性能,以至于它变成了数据库不可缺少的一部分。

  索引分类:

  逻辑分类

  single column or concatenated    对一列或多列建所引

  unique or nonunique    唯一的和非唯一的所引,也就是对某一列或几列的键值(key)是否是唯一的。

  Function-based   基于某些函数索引,当执行某些函数时需要对其进行计算,可以将某些函数的计算结果事先保存并加以索引,提高效率。

  Doman   索引数据库以外的数据,使用相对较少

  物理分类

  B-Tree :normal or reverse key B-Tree索引也是我们传统上常见所理解的索引,它又可以分为正常所引和倒序索引。

  Bitmap : 位图所引,后面会细讲

  B-Tree 索引

  B-Tree index 也是我们传统上常见所理解的索引。B-tree (balance tree)即平衡树,左右两个分支相对平衡。

  B-Tree index

  Root为根节点,branch 为分支节点,leaf 到最下面一层称为叶子节点。每个节点表示一层,当查找某一数据时先读根节点,再读支节点,最后找到叶子节点。叶子节点会存放index entry (索引入口),每个索引入口对应一条记录。

  Index entry 的组成部分:

  Indexentry entry header   存放一些控制信息。

  Key column length   某一key的长度

  Key column value    某一个key 的值

  ROWID   指针,具体指向于某一个数据

  创建索引:

复制代码

  用户登录:

  SQL> conn as1/as1

  Connected.

  创建表:

  SQL> create table dex (id int,sex char(1),name char(10));

  Table created.

  向表中插入1000条数据

  SQL> begin

  2 for i in 1..1000

  3 loop

  4 insert into dex values(i,'M','chongshi');

  5 end loop;

  6 commit;

  7 end;

  8 /

  PL/SQL procedure successfully completed.

  查看表记录

  SQL> select * from dex;

  ID SE NAME

  ---------- -- -------------------- ... . .....

  991 M chongshi

  992 M chongshi

  993 M chongshi

  994 M chongshi

  995 M chongshi

  996 M chongshi

  997 M chongshi

  998 M chongshi

  999 M chongshi

  1000 M chongshi

  1000 rows selected.

  创建索引:

  SQL> create index dex_idx1 on dex(id);

  Index created.

  注:对表的第一列(id)创建索引。

  查看创建的表与索引

  SQL> select object_name,object_type from user_objects;

  OBJECT_NAME OBJECT_TYPE

  --------------------------------------------------------------------------------

  DEX TABLE

  DEX_IDX1 INDEX

复制代码

  索引分离于表,作为一个单独的个体存在,除了可以根据单个字段创建索引,也可以根据多列创建索引。Oracle要求创建索引最多不可超过32列。

复制代码

  SQL> create index dex_index2 on dex(sex,name);

  Index created.

  SQL> select object_name,object_type from user_objects;

  OBJECT_NAME OBJECT_TYPE

  --------------------------------------------------------------------------------

  DEX TABLE

  DEX_IDX1 INDEX

  DEX_INDEX2 INDEX

复制代码

  这里需要理解:

  编写一本书,只有章节页面定好之后再设置目录;数据库索引也是一样,只有先插入好数据,再建立索引。那么我们后续对数据库的内容进行插入、删除,索引也需要随之变化。但索引的修改是由oracle自动完成的。

  上面这张图能更加清晰的描述索引的结构。

  跟节点记录0至50条数据的位置,分支节点进行拆分记录0至10.......42至50,叶子节点记录每第数据的长度和值,并由指针指向具体的数据。

  最后一层的叶子节是双向链接,它们是被有序的链接起来,这样才能快速锁定一个数据范围。

  如:

复制代码

  SQL> select * from dex where id>23 and id<32;

原文转自:http://www.cnblogs.com/fnng/archive/2012/10/10/2719221.html