B-Tree在数据结构中有两种含义:
- Binary Tree(二叉树)
- Blance Tree (平衡树)
哪什么是二叉树?什么又是平衡树呢?
二叉树是指一个父节点最多含有两个子节点(可以含有一个子阶段,比如左二叉树、右二叉树),形如
而平衡树是指一个父节点可以有多个子节点,而且每个子节点含义相同个数子节点活叶子节点,且叶子节点在同一级别,形如
B-Tree Index采用的是平衡树,形如
索引在数据库中是单独的对象,它是由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,这就是所谓的“
索引范围扫描”