[b]B-Tree在数据结构中有两种含义:[/b]
[list]
[*]Binary Tree(二叉树)
[*]Blance Tree (平衡树)
[/list]
[b]哪什么是二叉树?什么又是平衡树呢?[/b]
二叉树是指一个父节点最多含有两个子节点(可以含有一个子阶段,比如左二叉树、右二叉树),形如
[img]http://dl.iteye.com/upload/picture/pic/93624/97188c88-8e53-3ce5-a43e-9d7749f357c4.jpg[/img]
而平衡树是指一个父节点可以有多个子节点,而且每个子节点含义相同个数子节点活叶子节点,且叶子节点在同一级别,形如
[img]http://dl.iteye.com/upload/picture/pic/93626/a976cb39-00b2-38c8-85fc-e88ce9130918.jpg[/img]
B-Tree Index采用的是平衡树,形如
[img]http://dl.iteye.com/upload/picture/pic/93628/c03947b5-e99c-3ef3-9975-4ca8f6956f50.bmp[/img]
索引在数据库中是单独的对象,它是由Oracle自动管理的。
比如
由此可知,建立索引对数据库查询提高了很高速度,但是不是建立索引越多,对数据库就越有利呢?回答是否定的,原因是索引越多,数据库表在做INSERT,UPDATE,DELETE时,ORACLE自动维护索引的开销比较大,这样会影响数据库的性能。
数据库索引查询的原理(如下图),其中最下叶子节点存放的是真实数据,采用的是双向链表结构完成的关联,这样在做这样的查询语句时,
SELECT * FROM t WHERE id > 23 and id < 45;
它实际上是先找最小值23,然后根据链表一直找到45,这就是所谓的“[b]索引范围扫描[/b]”
[img]http://dl.iteye.com/upload/picture/pic/93630/61873523-ce66-3411-9a86-5b57b8ce133d.bmp[/img]
[list]
[*]Binary Tree(二叉树)
[*]Blance Tree (平衡树)
[/list]
[b]哪什么是二叉树?什么又是平衡树呢?[/b]
二叉树是指一个父节点最多含有两个子节点(可以含有一个子阶段,比如左二叉树、右二叉树),形如
[img]http://dl.iteye.com/upload/picture/pic/93624/97188c88-8e53-3ce5-a43e-9d7749f357c4.jpg[/img]
而平衡树是指一个父节点可以有多个子节点,而且每个子节点含义相同个数子节点活叶子节点,且叶子节点在同一级别,形如
[img]http://dl.iteye.com/upload/picture/pic/93626/a976cb39-00b2-38c8-85fc-e88ce9130918.jpg[/img]
B-Tree Index采用的是平衡树,形如
[img]http://dl.iteye.com/upload/picture/pic/93628/c03947b5-e99c-3ef3-9975-4ca8f6956f50.bmp[/img]
索引在数据库中是单独的对象,它是由Oracle自动管理的。
比如
CREATE TABLE t(id int,sex char(1),name char(10));
col object_name format a20;
SELECT object_name,object_type FROM user_onjects;
OBJECT_NAME OBJECT_TYPE
---------------- -------------
T TABLE
CREATE INDEX t_idx1 on t(id);
SELECT object_name,object_type FROM user_onjects;
OBJECT_NAME OBJECT_TYPE
---------------- -------------
T TABLE
T_IDX1 INDEX
由此可知,建立索引对数据库查询提高了很高速度,但是不是建立索引越多,对数据库就越有利呢?回答是否定的,原因是索引越多,数据库表在做INSERT,UPDATE,DELETE时,ORACLE自动维护索引的开销比较大,这样会影响数据库的性能。
数据库索引查询的原理(如下图),其中最下叶子节点存放的是真实数据,采用的是双向链表结构完成的关联,这样在做这样的查询语句时,
SELECT * FROM t WHERE id > 23 and id < 45;
它实际上是先找最小值23,然后根据链表一直找到45,这就是所谓的“[b]索引范围扫描[/b]”
[img]http://dl.iteye.com/upload/picture/pic/93630/61873523-ce66-3411-9a86-5b57b8ce133d.bmp[/img]