第五章 数据库的存储结构

55
第第第 第第第第第第第第

Upload: damali

Post on 05-Jan-2016

62 views

Category:

Documents


7 download

DESCRIPTION

第五章 数据库的存储结构. 5.1 数据库存储介质的特点. 数据库是大量、持久数据的集合,在现阶段 用内存作为数据库的存储介质是不合适的 。. 采用多级存储器,用的最多的辅存是磁盘。 光盘由于速度和价格上的原因,近期无法取代硬盘。 磁带是顺序存取存储器,通常用作后备存储器。. 活动头磁盘的存取时间由三部分组成: 寻道时间 、等待时间以及传输时间。 磁盘上的数据划分为大小相等的物理块。磁盘与内存间的数据交换以物理块为单位。. 以物理块为交换单位的优点: 1). 减少 I/O 的次数 ,从而减少寻道和等待的时间。 2). 减少间隙的数目 ,提高磁盘空间利用率。 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第五章 数据库的存储结构

第五章 数据库的存储结构

Page 2: 第五章 数据库的存储结构

5.1 5.1 数据库存储介质的特点数据库存储介质的特点

采用多级存储器,用的最多的辅存是磁盘。采用多级存储器,用的最多的辅存是磁盘。 光盘由于速度和价格上的原因,近期无法取光盘由于速度和价格上的原因,近期无法取

代硬盘。 代硬盘。 磁带是顺序存取存储器,通常用作后备存储磁带是顺序存取存储器,通常用作后备存储

器。器。

数据库是大量、持久数据的集合,在现阶段用内存作为数据库的存储介质是不合适的。

Page 3: 第五章 数据库的存储结构

活动头磁盘的存取时间由三部分组成:寻道时间、等待时间以及传输时间。

磁盘上的数据划分为大小相等的物理块。磁盘与内存间的数据交换以物理块为单位。以物理块为交换单位的优点:以物理块为交换单位的优点:1).1). 减少减少 I/OI/O 的次数的次数,从而减少寻道和等待的时间。,从而减少寻道和等待的时间。2).2). 减少间隙的数目减少间隙的数目,提高磁盘空间利用率。,提高磁盘空间利用率。物理快的大小由物理快的大小由 OSOS 决定。决定。

Page 4: 第五章 数据库的存储结构

一般,在磁盘和内存之间设立缓冲区以解决二者的速度不匹配问题。 由于有多个缓冲块可供申请使用,磁盘的读写操作和读写数据的处理可以重叠进行。

读出:i块缓冲块 A

处理: 处理 A 中 i块

i+1块缓冲块 B i+2块缓冲块 A

处理 B 中 i+1块

Page 5: 第五章 数据库的存储结构

OSOS 与与 DBMSDBMS 都有各自的缓冲区。都有各自的缓冲区。 不少不少 DBMSDBMS 采用采用延迟写延迟写与与提前读提前读技术,减少技术,减少I/OI/O ,,改善性能。改善性能。

Page 6: 第五章 数据库的存储结构

5.2 5.2 记录的存储结构记录的存储结构 记录是目前商用数据库的基本数据单元,有定长和变长之分。

记录的存储结构1.1. 定位法——每个字段按其最大可能长度分配定长定位法——每个字段按其最大可能长度分配定长的的 位置位置LIbbb MINGbbb MALEbb 1967

5

12

18

Page 7: 第五章 数据库的存储结构

2.2. 相对法——每个字段没有固定的长度,而是用特 相对法——每个字段没有固定的长度,而是用特

殊的字符分隔开殊的字符分隔开LI? MING? MALE? 1967#

问题:字段中也需要用到这些分隔符时,如何进行表示?

Page 8: 第五章 数据库的存储结构

3.3. 计数法——每个字段的开始加上表示该字段长度 计数法——每个字段的开始加上表示该字段长度

的字段的字段02LI04MING04MALE041967

问题:计数法对字段的实际长度有什么要求?

Page 9: 第五章 数据库的存储结构

5.2.2 记录在物理块上的分配 磁盘上,记录必须分配到物理块中。磁盘上,记录必须分配到物理块中。

  

记录跨快存储(记录跨快存储( spannedspanned ))

记录不垮块存储(记录不垮块存储( unspannedunspanned ))

  设B为物理块的有效空间大小,R为固定长记录的大小,若B>R,则每个物理块可容纳的记录数为:

p=[B/R]

   p 称为块因子( Blocking Factor )。

Page 10: 第五章 数据库的存储结构

记录一般不会刚好填满物理块,会留下不用的零头空间:B―p×R<R

为了利用这部分空间,可以利用记录的跨块存储组织 (spanned organization) 。

记录 1 记录 2 记录 3 记录 4

Page 11: 第五章 数据库的存储结构

定长记录(跨块)定长记录(跨块)

记录 1 记录 2 记录 3 记录4

块 i

记录 4(剩余部分 )

记录 5 记录 6 记录 7块 i+1

Page 12: 第五章 数据库的存储结构

变长记录(跨块)变长记录(跨块)记录 1 记录 2 记录 3块 i

记录 3( 剩余部分 )

记录 4 记录 5块 i+1

Page 13: 第五章 数据库的存储结构

5.2.3 物理块在磁盘上的分配

早期的早期的 DBMSDBMS 中,通常由操作系统分配中,通常由操作系统分配数据库所需的物理块,逻辑上相邻的数据可数据库所需的物理块,逻辑上相邻的数据可能被分散到磁盘的不同区域。使得访问数据能被分散到磁盘的不同区域。使得访问数据时,性能下降。时,性能下降。

现代现代 DBMSDBMS 中,都改由中,都改由 DBMSDBMS 初始化时初始化时向操作系统一次性的申请所需的存储空间。向操作系统一次性的申请所需的存储空间。

Page 14: 第五章 数据库的存储结构

1、连续分配法( contiguous allocation)

22 、链接分配法(、链接分配法( linked allocationlinked allocation )) 物理块未必分配在磁盘的连续存储空间上,物理块未必分配在磁盘的连续存储空间上,各物理块用指针链接,各物理块用指针链接,有利于文件的扩展,但有利于文件的扩展,但效率较差。效率较差。

将一个文件的块分配在磁盘的连续空间上,块的次序就是其存储的次序,有利于顺序存取多块文件,不利于文件的扩充。

Page 15: 第五章 数据库的存储结构

33 、簇集分配法(、簇集分配法( clustered allocationclustered allocation )) 上述两种方法的结合。上述两种方法的结合。

44 、索引分配法(、索引分配法( indexed allocationindexed allocation )) 每个文件有一个逻辑块号与其物理块地址对照的索引。

Page 16: 第五章 数据库的存储结构

数据压缩技术数据压缩技术

1.1.消零或空格符法(消零或空格符法( null null suppressionsuppression )) 例如,例如, bbbbbbbbbb 可以用可以用 #5#5 表示;表示; 000000000000 可以用可以用 @6@6 表示等。表示等。2.2.串型代替法(串型代替法( pattern pattern substitutionsubstitution ))

对反复出现的字符串,可以用一个对反复出现的字符串,可以用一个省略符代替。省略符代替。

Page 17: 第五章 数据库的存储结构

例如,串型表如右:例如,串型表如右: IBM PC/XT @

0000 #

原始数据

IBM PC/XT 00001

IBM PC/XT 00002

压缩数据

@#1

@#2

Page 18: 第五章 数据库的存储结构

3.3.索引法(索引法( indexingindexing ))

串行代替法的变种,对重复出现的串行,串行代替法的变种,对重复出现的串行,单独存储,在用到这些串行的地方,单独存储,在用到这些串行的地方,用指针用指针引用引用它。它。

Page 19: 第五章 数据库的存储结构

索引法示例:

Beijing

Nanjing

Shanghai

CITY表SHOP# CITY

0001 Nanjing

0002 Nanjing

0003 Nanjing

0004 Shanghai

原始数据

0005 Shanghai

SHOP# CITY

0001

0002

0003

0004

压缩数据

0005

问题:问题:索引法对串型的长度有什么要求?索引法对串型的长度有什么要求?

Page 20: 第五章 数据库的存储结构

5.3 5.3 文件结构和存取路径文件结构和存取路径

5.3.1 5.3.1 访问文件的方式访问文件的方式

传统的数据模型都以记录为基础,记录的集合构传统的数据模型都以记录为基础,记录的集合构成文件。文件须按一定的结构组织和存储记录,按一成文件。文件须按一定的结构组织和存储记录,按一定的存取路径访问有关记录。定的存取路径访问有关记录。 对数据库的操作最终要落实到对文件的操作。对数据库的操作最终要落实到对文件的操作。 文件结构及其所提供的存储路径直接影响数据访文件结构及其所提供的存储路径直接影响数据访问的速度,通常针对不同的数据访问采用不同的文件问的速度,通常针对不同的数据访问采用不同的文件结构。结构。

Page 21: 第五章 数据库的存储结构

1.1.查询文件的全部或相当多的记录(≥查询文件的全部或相当多的记录(≥ 15%15%))2.2.查询某一特定记录查询某一特定记录3.3.查询某些记录查询某些记录4.4.范围查询范围查询5.5. 记录的更新记录的更新

文件访问方式按设计文件结构的观点分文件访问方式按设计文件结构的观点分 55类类

Page 22: 第五章 数据库的存储结构

5.3.2 5.3.2 数据库对文件的要求数据库对文件的要求

一些一些 DBMSDBMS就以就以 OSOS 的的文件管理系统作为的的文件管理系统作为其物理层的基础,更多的其物理层的基础,更多的 DBMSDBMS 不用不用 OSOS 的文件的文件管理系统,而是独立设计其存储结构。原因如下:管理系统,而是独立设计其存储结构。原因如下:

传统文件系统不能提供实现传统文件系统不能提供实现 DBMSDBMS功能所需的功能所需的附加信息。附加信息。 DBMSDBMS 为了实现其功能,须在文件目录、为了实现其功能,须在文件目录、文件描述块文件描述块、、物理块等部分附加一些信息。物理块等部分附加一些信息。 传统文件系统主要面向批处理,数据库系统要传统文件系统主要面向批处理,数据库系统要求即时访问、动态修改。这就要求文件的结构能求即时访问、动态修改。这就要求文件的结构能适应数据的动态变化,提供快速访问路径。适应数据的动态变化,提供快速访问路径。

Page 23: 第五章 数据库的存储结构

传统文件系统服务对象特殊,用途单一,共享传统文件系统服务对象特殊,用途单一,共享度低;数据库中的文件供所有用户共享,有些用度低;数据库中的文件供所有用户共享,有些用途甚至是不可知的。途甚至是不可知的。 减少减少 DBMSDBMS 对对 OSOS 的依赖,提高的依赖,提高 DBMSDBMS 的可移的可移植性。植性。 传统文件系统一旦建立以后,数据量比较稳定;传统文件系统一旦建立以后,数据量比较稳定;数据库中文件的数据量变化较大。数据库中文件的数据量变化较大。

Page 24: 第五章 数据库的存储结构

5.3.3 5.3.3 文件的基本类型文件的基本类型

不同类型的访问各有其使用的文件结构和存取路径。 DBMS通常提供多种文件结构,供数据库设计者选用。1.堆文件( heap file)2.直接文件( direct file)3.索引文件( indexed file)

Page 25: 第五章 数据库的存储结构

最简单、最早使用的文最简单、最早使用的文件结构。记录按其插入件结构。记录按其插入的先后次序存放(的先后次序存放(所有所有记录在物理上不一定相记录在物理上不一定相邻接邻接))

堆文件插入容易、查找堆文件插入容易、查找不方便(不方便(所提供的唯一所提供的唯一存取路径就是顺序搜存取路径就是顺序搜索索))

堆文件

记录 1

记录 6

记录 2

记录 1

记录 2

记录 3

记录 5

记录 6

1.1.堆文件堆文件

记录 4

Page 26: 第五章 数据库的存储结构

适于访问全部或相当多的记录,对于其它类访问效率适于访问全部或相当多的记录,对于其它类访问效率较低。较低。(设文件记录数为(设文件记录数为 NN ,,查找某一记录的平均访查找某一记录的平均访问次数为问次数为 N+1/2N+1/2 ))

若堆文件的记录按检索属性排序,可用二分查找法。若堆文件的记录按检索属性排序,可用二分查找法。(但要以排序为代价)(但要以排序为代价)

Page 27: 第五章 数据库的存储结构

堆文件

记录 1

记录 3

记录 5

记录 6

记录 4

记录 7

记录 8

记录 2

假设,要删除右图堆文件中的第 2 , 4 , 6条数据记录。 直接删除这三条记录的情况如右图所示。 带来什么问题?

删除记录较麻烦删除记录较麻烦

空间回收问题,后续记录空间回收问题,后续记录需搬移,影响对文件的操作效需搬移,影响对文件的操作效率。率。

Page 28: 第五章 数据库的存储结构

作删除标记

堆文件

记录 1

记录 2

记录 3

记录 5

记录 6

记录 4

记录 7

记录 8堆文件

记录 1

记录 3

记录 5

记录 6

记录 4

记录 7

记录 8

记录 2

堆文件

记录 1

记录 3

记录 5

记录 7

记录 8

集中删除记录,并进行记录重排

解决方法

Page 29: 第五章 数据库的存储结构

2.2.直接文件直接文件

直接文件中,将记录的某一属性用散列函数直接文件中,将记录的某一属性用散列函数直接映射成记录的地址,被散列的属性称为散列键。直接映射成记录的地址,被散列的属性称为散列键。

Student(SNO,SNAME,SEX,BIRTHDATE,DEPT)

散 列 函 数 H(SNO)=Address900412 李林 … 计算机系

H(900412)=@addr

@addr

存储空间

900412 李林 … 计算机系

Page 30: 第五章 数据库的存储结构

键所映射的地址范围固定键所映射的地址范围固定(地址范围设的太大或(地址范围设的太大或太小都不好太小都不好 ,,为什么?为什么?))。。

上述原因导致直接文件目前在数据库系统中使用不多。上述原因导致直接文件目前在数据库系统中使用不多。

直接文件存在的问题:直接文件存在的问题:

地址重叠问题地址重叠问题(处理地址重叠增加了开销)(处理地址重叠增加了开销)。。 直接文件只对散列键的访问有效。直接文件只对散列键的访问有效。 不便于处理变长记录。不便于处理变长记录。 对于通用的对于通用的 DBMSDBMS很难找到通用的散列函数。很难找到通用的散列函数。

Page 31: 第五章 数据库的存储结构

3.3.索引文件索引文件 索引相当于一个映射机构,把关系中相应记录的某个(些)属性的键值转换为该记录的存储地址(或地址集)。

@addr1

@addr2

@addr3

… …

SNO Address

学生表的索引文件

900412 @addr2

900417 @addr1

900418 @addr3

存储空间

900418 周力 … 计算机系

900412 李林 … 计算机系

900417 陈燕 … 计算机系

Page 32: 第五章 数据库的存储结构

索引与散列的区别——索引与散列的区别——索引文件有记录才占用索引文件有记录才占用 存储空间,使用散列空文件也占用全部文件空间。存储空间,使用散列空文件也占用全部文件空间。 索引本省占用空间,但索引一般较记录小得多索引本省占用空间,但索引一般较记录小得多

针对非散列键和非索引属性的访问,都不能有效发挥直接文件或索引文件的优势。散列或索引失效时,两者谁的访问代价更大?

Page 33: 第五章 数据库的存储结构

1.1.主索引——以主键为索引键主索引——以主键为索引键 ((primary primary index)index) 。。2.2. 次索引——以非主键为索引键次索引——以非主键为索引键 ((secendary secendary index)index) ,,建立次索引可以提高查询的效率,但建立次索引可以提高查询的效率,但增加了索引维护的开销。增加了索引维护的开销。3.3.倒排文件——主索引倒排文件——主索引 ++次索引的极端情况(文次索引的极端情况(文件的所有属性上都建立索引),有利于多属性值件的所有属性上都建立索引),有利于多属性值的查找,但数据更新时开销很大。的查找,但数据更新时开销很大。

Page 34: 第五章 数据库的存储结构

为了便于检索,索引项总是按索引键排序。为了便于检索,索引项总是按索引键排序。

受按门牌号找住户的启示(受按门牌号找住户的启示(住户在“物住户在“物理”上按门牌号码排序理”上按门牌号码排序),提出),提出非稠密索引非稠密索引。。

注意:索引项注意:索引项记录记录 ,, 并不是文件中的记并不是文件中的记录录按索引键排序按索引键排序

文件中的记录按索引键排序吗?文件中的记录按索引键排序吗?

Page 35: 第五章 数据库的存储结构

非稠密索引与稠密索引1. 不为每个键值设立索引项的索引——非稠密索引2. 可以节省索引的存储空间,代价是文件要按索引键排序3.对一个文件,只能为一个索引键(一般为主键)建立非稠密索引(为什么?)

Page 36: 第五章 数据库的存储结构

4.4.非稠密索引中,若干个记录组成一个单元存储区,非稠密索引中,若干个记录组成一个单元存储区,单元存储区中的记录按索引键排序。单元存储区中的记录按索引键排序。

5.5. 单元存储区装满后,可向溢出区溢出(用指针指向单元存储区装满后,可向溢出区溢出(用指针指向溢出区),但溢出太多时,指针链接次数增加,将导致溢出区),但溢出太多时,指针链接次数增加,将导致数据库性能下降。数据库性能下降。

6.6. 可以建立多级非稠密索引(可以建立多级非稠密索引(通常最高一级索引应尽通常最高一级索引应尽量保证可以常驻内存量保证可以常驻内存)。 )。

Page 37: 第五章 数据库的存储结构

11223344

5566778899

101011111212

121121134134167167182182203203211211223223

229229231231237237241241

1313141415151616……

255255259259267267271271……

单元存单元存储区储区

182182 44 201201

223223 77 223223

241241 1212 251251

271271 1616 271271

289289 1919 289289

311311 2424 311311

419419 2828 419419

430430 3131 430430

单元存储区

单元存储区

最高键值

最高键值

单元存储最高

单元存储最高

键值相对地址

键值相对地址

最高键值

最高键值

271271

430430

601601

191191 201 201 249 249 251 251

示例

溢出区溢出区

溢出链头

溢出链头

指针指针

相对地址相对地址

索引键索引键

Page 38: 第五章 数据库的存储结构

1122334455667788

99101011111212

121121134134167167182182203203211211223223

229229231231237237241241

1313141415151616……

255255259259267267271271……

单元存单元存储区储区

182182 44 201201

223223 77 223223

241241 1212 251251

271271 1616 271271

289289 1919 289289

311311 2424 311311

419419 2828 419419

430430 3131 430430

单元存储区

单元存储区

最高键值

最高键值

单元存储最高

单元存储最高

键值相对地址

键值相对地址

最高键值

最高键值

271271

430430

601601

191191 201 201 249 249 251 251

溢出区溢出区

溢出链头

溢出链头

指针指针

相对地址相对地址

索引键索引键

查找索引键为 211 的记录的存储地址

211

7

211

Page 39: 第五章 数据库的存储结构

稠密索引( dense index)

每个键值对应一个索引项——稠密索引。每个键值对应一个索引项——稠密索引。 稠密索引的稠密索引的预查找预查找功能功能(用记录的地址代替记录参与(用记录的地址代替记录参与

集合运算,减少集合运算,减少 I/OI/O 次数)次数)。。 索引溢出的问题索引溢出的问题

稠密索引中,每增加一个键值,就要增加一个索引项。稠密索引中,每增加一个键值,就要增加一个索引项。索引也会有溢出的可能。索引也会有溢出的可能。

解决方法:解决方法: 1.1. 在每个索引块中预留发展的空间在每个索引块中预留发展的空间 2.2. 建立索引溢出区建立索引溢出区

Page 40: 第五章 数据库的存储结构

例如:某个键值对应例如:某个键值对应 100100个记录,且这个记录,且这 100100个记个记录分散在录分散在 100100个物理块中,虽然通过稠密索引可个物理块中,虽然通过稠密索引可以一次获得这以一次获得这 100100个地址,但仍然要访问个地址,但仍然要访问 100100个个物理块。物理块。

1.1.稠密索引中,若键值不唯一,则在最低级索引中,稠密索引中,若键值不唯一,则在最低级索引中,每个键值对应的可能是一个每个键值对应的可能是一个地址集(对应多个记地址集(对应多个记录)录)。如果这些记录分散在不同的物理块内,稠密。如果这些记录分散在不同的物理块内,稠密索引的优点并不能体现出来索引的优点并不能体现出来(并不一定能减少(并不一定能减少 I/I/OO )。)。

Page 41: 第五章 数据库的存储结构

采用簇集索引:把键值相同的记录在物理地址上集中存放。采用簇集索引:把键值相同的记录在物理地址上集中存放。

键键 指针指针 头块头块 链块链块 11 链块链块 nn

索引区索引区

2.2. 解决方法——簇集索引(解决方法——簇集索引( clustering clustering indexindex ))

Page 42: 第五章 数据库的存储结构

3.3.缺点:缺点:建立簇集索引的开销较大,整个文件要重新组织。建立簇集索引的开销较大,整个文件要重新组织。

Page 43: 第五章 数据库的存储结构

常用索引总结常用索引总结

索引索引

主索引主索引

次索引次索引

按主键排序——非稠密索引按主键排序——非稠密索引

不按主键排序——稠密索引不按主键排序——稠密索引

簇集索引——按索引键排序并簇集,簇集索引——按索引键排序并簇集, 稠密索引稠密索引

非簇集索引——不按索引键排序,非簇集索引——不按索引键排序, 稠密索引稠密索引

Page 44: 第五章 数据库的存储结构

5.4 5.4 动态索引动态索引

从数据结构角度看:静态索引是个多分树;动态索引是一种平衡多分树(即 B-树),常用 B+树。

B+树的限制和规定: 每个节点最多有 2k 个键值, k 称为 B+树的秩(Order); 根节点至少有一个键值,其它节点至少有 k 个键值 ,节点内,键值有序存放 ; 除叶节点无子女外,其它节点若有 J 个键值,则有 J+1 个子女 ; 所有叶节点都处于树的同一层,即树始终保持平衡。

Page 45: 第五章 数据库的存储结构

10 20

15

从根向叶搜索,直至相应叶节点,若该叶节点不满,则将键值插入叶节点中;如叶节点已满(即已经有 2K 个键值),则将此叶节点分裂为二,叶节点分裂后,其双亲节点也必须增加一个键值,若双亲节点不满,插入过程结束;否则双亲节点继续分裂为两个节点,如此继续直到插入过程中止。

插入算法:

(K=1): 10 , 15 , 20 , 25 , 30 , 35 ,40 , 50

10

15

10, 15

20

25

20,25

30

10

15

20 30

25

2010

15,25

30

15

25

35

10 20 30 40,50

Page 46: 第五章 数据库的存储结构

先从根节点出发,找到待删除键值所在叶节点;若删除该键值后,叶节点中键值数减为 K-1个,则向其左右兄弟叶节点借一个键值,以保持每个叶节点存放键值不少于 K 个;若其左右叶节点都只有 K 个键值,则可将该叶节点与其左(或右)叶节点合并成包含 2K-1个键值的叶节点,合并后,其双亲节点要减少一个键值,有可能导致双亲节点的合并。

删除算法:

15

25

35

10 20 30 40,501010,15

35

25,35

10,15 30 40,50

Page 47: 第五章 数据库的存储结构

SH ST

索引集

顺序集

BB++ 树实现的主索树实现的主索引引

Page 48: 第五章 数据库的存储结构

BB++ 树实现的主索引包含如下树实现的主索引包含如下 22 部分:索引集和顺序集。部分:索引集和顺序集。节点类型 块中索引键数 …

0P 0K 1P 1K 1nK nP

索引集节点

节点类型节点类型 块中索引键数块中索引键数 前向指针前向指针 后向指针后向指针 ……0K 0tid 1K 1tid nK ntid

顺序集节点注:1.节点一般是一个物理块。2.元组标识符 tid,实际上是记录的地址,由块号和记录在块中的指针号组成(使用记录在块中的指针号表示记录在块中的位置,好于直接用记录在块中的地址,方便记录在块内移动)。

Page 49: 第五章 数据库的存储结构

要找键值要找键值 KKXX所对应的记录时,所对应的记录时,从索引树的根开始,按下面的从索引树的根开始,按下面的规则自上而下地搜索:规则自上而下地搜索:1.1. 若若 KKxx<K<K00 ,,则沿则沿 PP00 所指所指的节点向下搜索;的节点向下搜索;

2.2. 若若 KKxx>K>Kn-1n-1 ,,则沿则沿 PPnn 所所指的节点向下搜索;指的节点向下搜索;

3.3. 若若 KKi-1i-1<<KKxx≤≤KKii ,,则沿则沿 PPii

所指的节点向下搜索。所指的节点向下搜索。

P0 K0 … Ki-1 Pi Ki … Kn-1 Pn

Kx KxKx

Page 50: 第五章 数据库的存储结构

注意:索引集节点中的键值不一定是文件中当前存在的键值(仅起“导航路标”的作用)。在搜索过程中,即使发现索引集节点中的键值等于要找的键值,查找仍要按上述规则进行下去。

问题:若在某个索引集结点中找到了待查找记录相应的索引键值,是否还要继续遍历B+树,为什么?

Page 51: 第五章 数据库的存储结构

索引集与顺序集的联系索引集与顺序集的联系… …

0P 0K iP1iK iK nP1nK

… …0sK 0tid sjK jtid )1( nsK 1ntid

顺序集节点中的键值要满足如下关系:

如果 Pi=P0 ,则 Ks0<Ks1<…<Ks(n-1)≤K0;

如果 Pi=Pn ,则 Ks(n-1)>…>Ks1>Ks0>Kn-1;

否则: Ki-1<Ks0<Ks1<…<Ks(n-1)≤Ki .

Page 52: 第五章 数据库的存储结构

B+树实现的主索引稍加修改后也可用于次索引(把顺序集结点的 tid换成指针,因为一个键值可能对应多个 tid)。

B+树实现的各种索引都是稠密索引(非稠密索引的概念源于静态索引),提供了顺序搜索的功能,这是它的优点。

Page 53: 第五章 数据库的存储结构

搜索搜索 BB++树所需的树所需的 I/OI/O 次数决定于其级数。次数决定于其级数。 设索引属性不同键值的数目为 N ,若索引键不是候选键,则记录数通常大于 N 。 B+树的级数决定于 N ,而不是记录数!

假设 B+树索引部分共有 L 级,其秩为 k ,则各级的最小结点数依次为:

1 , 2 , 2(k+1) …, , 2(k+1)L-2

Page 54: 第五章 数据库的存储结构

L 决定了找到所需顺序集结点所需的 I/O次数(访问数据还要额外的 I/O),例如k=99, N=2,000,000,有 L<5,即至多经过 4 次I/O就可以找到相应的顺序集结点。

顺序集至少有 2(k+1)L-2 个结点。得出:N≥2(k+1)L-2×kL≤2+log(k+1)(N/2k)≈1+ log(k+1)(N/2)

Page 55: 第五章 数据库的存储结构

BB++树提供树提供 33 种存取路径:种存取路径:1.1. 通过索引集进行树形搜索通过索引集进行树形搜索2.2. 通过顺序集进行顺序搜索通过顺序集进行顺序搜索3.3. 先通过索引找到入口,再沿顺序集顺 先通过索引找到入口,再沿顺序集顺 序搜索 序搜索