Upload
keith-alexander
View
50
Download
2
Embed Size (px)
DESCRIPTION
关于索引. 索 引. RDBMS 中索引一般采用 B+ 树、 HASH 索引来实现 B+ 树索引具有动态平衡的优点 HASH 索引具有查找速度快的特点 索引是关系数据库的内部实现技术,属于内模式的范畴 CREATE INDEX 语句定义索引时,可以定义索引是唯一索引、非唯一索引或聚簇索引 采用 B+ 树,还是 HASH 索引则由具体的 RDBMS 来决定. An Introduction to Database System. 一、建立索引. 语句格式 CREATE [UNIQUE] [CLUSTER] INDEX < 索引名 > - PowerPoint PPT Presentation
Citation preview
关于索引
An Introduction to Database System
索 引• RDBMS 中索引一般采用 B+ 树、 HASH 索引来实现
B+ 树索引具有动态平衡的优点 HASH 索引具有查找速度快的特点
• 索引是关系数据库的内部实现技术,属于内模式的范畴 • CREATE INDEX 语句定义索引时,可以定义索引是唯一
索引、非唯一索引或聚簇索引 • 采用 B+ 树,还是 HASH 索引则由具体的 RDBMS 来决定
An Introduction to Database System
一、建立索引 语句格式
CREATE [UNIQUE] [CLUSTER] INDEX < 索引名 >
ON < 表名 >(< 列名 >[< 次序 >][,< 列名 >[< 次序 >] ]…) ;– < 表名 > :要建索引的基本表名字– 索引:可以建立在该表的一列或多列上,各列名之间用逗号
分隔– < 次序 > :指定索引值的排列次序,升序: ASC ,降序:
DESC 。缺省值: ASC
– UNIQUE :此索引的每一个索引值只对应唯一的数据记录– CLUSTER :表示要建立的索引是聚簇索引 , 索引项的顺序
与表中记录的物理顺序一致的索引组织
An Introduction to Database System
建立索引(续)
[ 例 13] CREATE CLUSTER INDEX Stusage
ON Student(Sage) ;• 在 Student 表的 Sage (年龄)列上建立一个聚簇索引,
而且 Student 表中的记录将按照 Sage 值的升序存放。
• 在最经常查询的列上建立聚簇索引以提高查询效率
• 一个基本表上最多只能建立一个聚簇索引
• 经常更新的列不宜建立聚簇索引
Kingbase 中创建 cluster 索引
• 在 Student 表的 Sage (年龄)列上建立一个普通索引– CREATE INDEX Stusage ON Student(Sage);根据普通索引 Stusage 建立簇索引 – CLUSTER Stusage ON Student;
An Introduction to Database System
建立索引(续) [ 例 14] 为学生 - 课程数据库中的 Student ,
Course , SC 三个表建立索引。 其中 Student 表按学号升序建唯一索引, Cour
se 表按课程号升序建唯一索引, SC 表按学号升序和课程号降序建唯一索引。
CREATE UNIQUE INDEX Stusname ON Student(Sname) ;
CREATE UNIQUE INDEX Coucname ON Course(Cname) ;
An Introduction to Database System
建立索引(续) [ 例 14] 为学生 - 课程数据库中的 Student , Course ,
SC 三个表建立索引。 其中 Student 表按学号升序建唯一索引, Course 表按课
程号升序建唯一索引, SC 表按学号和课程号建唯一索引。
CREATE UNIQUE INDEX Stusno ON Student(Sno) ;CREATE UNIQUE INDEX Coucno ON Course(Cno) ;CREATE UNIQUE INDEX SCno ON SC(Sno , Cno) ;
An Introduction to Database System
二、删除索引
• DROP INDEX < 索引名 > ;删除索引时,系统会从数据字典中删去有关该
索引的描述。
[ 例 15] 删除 Student 表的 Stusname 索引
DROP INDEX Stusname ;
Sequential File
2010
4030
6050
8070
10090
Sequential File按照某个属性排序的文件
顺序文件上的索引
Sequential File
2010
4030
6050
8070
10090
稠密索引( Dense Index )1020304050607080
90100110120
One item for eachRecord
Item:(Search key,pointer to record)
B 树和 B+ 树• B 树
– 能自动保持与数据文件大小适应的索引层次– 平衡树– 能对所使用的存储空间进行管理,使每个块
处于全满半满之间• B+ 树
– 特殊的 B 树,内部结点只存储索引块– 叶结点用指针连接
4.3.1 B+ 树
指向码值为31 的记录 指向码值为
37 的记录
指向码值为41 的记录
指向顺序集上的下一个叶结点
典型的叶结点
指向码值K < 23 指向码值
23≤K<31
指向码值 31≤K<43
指向码值 K≥43
典型的非叶结点
参数 n=3:
每个块存放码值的最大个数 :3最小码数: m最小指针数: p
B+ 树指针和码的数量
最大指针数 最大码数
最小指针数( 指向数据 )
最小码数
内部结点 n + 1 n (n + 1) / 2 (n + 1) / 2 -1
叶结点 n + 1 n (n + 1) / 2 (n + 1) / 2
根结点 n + 1 n 1 1
An Introduction to Database System
B+ 树中的查找
查找键为 37 的记录13 < 37
31<37<43
找到 37
键值为 37 的记录IO 数: 4若把第一、第二层结点保存在缓冲区IO 数: 2
An Introduction to Database System
B+ 树中的查找 ( 若索引块全在磁盘 )
查找键为 37 的记录
读入 root 节点 ,IO=1根据条件 13 < 37, 读取下一节点块读入下一节点 ,IO=2根据条件 31<37<43,读取下一节点块读入下一节点 ,IO=3, 找到键值 37, 读取记录指针 ,读取记录所在的块13 7 23 31 43
2 3 5 7 11 13 17 19
23 29 31 37 41 43 47
tupl e
tupl e
tupl e
. . .
tupl e
tupl e
tupl e
. . .
tupl e
tupl e
tupl e
. . .
13 23 31 43
31 37 41 tupl e
tupl e
tupl e
. . .
Main Memory
Disk
读入数据块 ,IO=4, 根据记录指针找到键值为 37 的记录
An Introduction to Database System
B+ 树中的查找( 若第一、二层索引块在内
存 )查找键为 37 的记录
读取 root 节点 , 根据条件13 < 37, 读取下一节点块
读取下一节点 , 根据条件31<37<43, 读取下一节点块
读入下一节点 ,IO=1, 找到键值 37, 读取记录指针 ,读取记录所在的块
13 7 23 31 43
2 3 5 7 11 13 17 19
23 29 31 37 41 43 47
tupl e
tupl e
tupl e
. . .
tupl e
tupl e
tupl e
. . .
tupl e
tupl e
tupl e
. . .
13 23 31 43
31 37 41 tupl e
tupl e
tupl e
. . .
Main Memory
Disk
读入数据块 ,IO=2, 根据记录指针找到键值为 37 的记录
7
B+ 树的插入三种情况:
叶结点满 内部结点满 动作否 否 把码放在叶结点合适的位置
是 否
1. 分裂叶结点2. 把码的中间值放在内部结点合适的位置3. 左侧的叶结点包括小于中间值的码4. 右侧的叶结点包括大于或等于中间值的码
是 是
1. 分裂叶节点2. 左侧的叶结点包括小于中间值的码3. 右侧的叶结点包括大于或等于中间值的码4. 分裂内部结点5. 左侧的内部结点包括小于中间值的码6. 右侧的内部结点包括大于中间值的码7. 把码的中间值放在上一级内部结点合适的位置如果上一级内部结点已满,则继续分裂上一级结点
B+ 树的插入
插入码 40(属于情况 3 )
40
1. 分裂叶结点
2. 码中间值上提 分裂内部结点
3. 码中间值上提
(40,b)
23 31
B+ 树的插入
13
7
2 3 5 7 11 13 17 19 23 29 43 47
插入码 40(属于情况 3 )
1. 分裂叶结点
2. 码中间值上提 分裂内部结点
3. 码中间值上提
13>40
31<40<43
31 37
40
41
叶结点满
43
40
B+ 树的删除三种情况:
叶结点小于最小充满度
内部结点小于最小充满度 动作
否 否
1. 删除叶结点中的码2. 对码重新排序3. 如果码在上一级内部结点出现,则用下一个码替换
是 否1. 组合叶结点和它的兄弟结点2. 相应更改内部结点以反映这种改变
是 是
1. 组合叶结点和它的兄弟结点2. 相应更改内部结点以反映这种改变3. 组合内部结点和它的兄弟结点继续组合内部结点,直到找到一个满足充满度的结点或者到达根结点
B+ 树的删除
删除码 7 (属于情况 2 )
5
5
1. 组合叶结点
2. 更改内部结点以反映这种改变
112 3
23 31
B+ 树的删除 - 删除码 7
13
13 17 19 23 29 43 47
7<13
7<=7
31 37 41
43
5 7
7
删除码 7 (属于情况 2 )
1. 组合叶结点
2. 更改内部结点以反映这种改变
5
B+ 树的删除
删除码 11 (属于情况 3 ,需要递归更改内部结点)
1. 组合叶结点
5
13
2. 更改内部结点以反映这种改变 (需要递归)
23
31 43
2 3
B+ 树的删除 - 删除码 11
13 17 19 23 29 43 47
11<13
5<11
31 37 41
43
5
1. 组合叶结点
2. 更改内部结点以反映这种改变
5
13
3123
删除码 11 (属于情况 3 ,需要递归更改内部结点)
11
13
B+ 树的效率• 查询效率
– B 树的层数+ 1 (数据)- 1 (根结点驻内存)– 一般 2 - 3 层: 100+4n+8(n+1)<=4096, n=332, 取 255
255×255×255 = 1658 万条记录• 插入效率
– 实际情况下,因为插入导致重组 B 树的情况很少• 删除效率
– 一种可选实现:不对删除做修改– 记录的删除标记:使用叶结点中指向记录的指针