《数据库原理》课程笔记 (Ch05-数据库存储结构)

存储介质

数据库采用多级存储器,用的最多的辅存是磁盘。磁盘的耗时主要在寻道时间

磁盘上数据划分为大小相等的物理块,磁盘与内存间的数据交换以物理块为单位。好处:

  • 减少IO次数
  • 减少间隙的数目,提高磁盘空间利用率

为了解决磁盘和内存之间速度不匹配,可设立缓冲区

DBMS可以采用延迟写(一系列写入一起进行)与提前读(正在处理i位置时提前调入i+1位置)技术,减少I/O,改善性能。

记录的存储结构

记录

  • 定位法:每个字段按最大可能长度分配定长
  • 相对法:每个字段没有固定的长度,而用特殊的字符分隔
  • 计数法:每个字段的开始加上该字段长度信息

记录到物理块

每个物理块可容纳记录数(块因子)p=[B/R],B:物理块大小,R:固定长记录的大小

通常,B=pR<R,即物理块会留出零头。为了利用这一部分,可以采用跨块组织。

物理块到磁盘

  • 连续分配法:有利于顺序存取,不利于扩充
  • 链接分配法:各物理块用指针连接,有利于扩充,效率较差
  • 簇集分配法:结合上述两种方法,将一系列物理块串在一起,入口放在某地址
  • 索引分配法:每个文件有一个逻辑块号与其物理块地址对照的索引条目

数据压缩

  • 消零或空格符法:例如00000用@5表示

  • 串型代替法:用某个约定的短串代替长串数据

  • 索引法:在用到这些串的地方,用指针引用索引表中的条目

文件结构和存取路径

访问文件的方式

对数据库的操作最终要落实到对文件的操作。

数据库对文件的要求

更多的DBMS不用OS的文件管理系统,而是独立设计其存储结构。因为:

  • 传统文件系统不能提供DBMS功能所需的附加信息
  • 传统文件系统主要面向批处理,数据库系统要求即时访问、动态修改
  • 减少DBMS对OS的依赖,提高DBMS的可移植性

文件的基本类型

  • 堆文件

    按照插入先后顺序存放。

    插入容易,查找不方便(只能顺序搜索),删除记录也较麻烦(需要空间回收)。

  • 直接文件

    记录的某一属性用散列函数直接映射成记录的地址。

    散列函数的设计较为困难;地址范围设的太大或太小都不好;要处理地址重叠问题。

  • 索引文件

    建立一个集中的映射机构,保存某些属性的值(如主键)与存储地址的映射。

    索引与散列的区别:索引文件有记录才占用空间,散列空文件也占用全部空间(因为必须留出整个空间)。

    针对非散列键和非索引属性的访问,都不能有效发挥直接文件或索引文件的优势。散列或索引失效时,散列的访问代价通常更大,因为需要遍历整个散列空间,而索引的条数较少。

索引的建立与使用

  • 键值:索引键属性的可能取值

  • 主索引:索引是主键 —— 一个索引只有一个地址对应

    • 非稠密索引:按主键排序
    • 稠密索引:不按主键排序
  • 次索引:索引不是主键 —— 一个索引可能有多个地址对应

    • 簇集索引:按索引键排序并簇集,是稠密索引
    • 非簇集索引:不按索引键排序,是稠密索引,也叫无序索引、非簇集的稠密次索引、二次索引
  • 稠密索引:每个键值对应一个索引项。每增加一个键值,就要增加一个索引项,索引会有溢出的可能

  • 非稠密索引:不为每个键值设立索引项。可以节省索引的存储空间,代价是文件要按索引键排序。对一个文件,只能为一个索引键(一般为主键)建立非稠密索引。

  • 簇集索引:在稠密索引中,若键值不唯一,则每个键值可能对应多个记录,这时可以在索引区进行拉链簇集,把键值相同的记录在物理地址上集中存放

动态索引

动态索引是一种平衡多分树(即B-树),常用B+树。

  • 每个节点最多有2k个键值,k称为B+树的
  • 根节点至少有一个键值,其它节点至少有k个键值。节点内,键值有序存放
  • 除叶节点外,其它节点若有J个键值,则有J+1个子女
  • 叶节点都处于树的同一层

用B+树实现主索引

要找键值Kx所对应的记录时,从索引树的根开始,按照大小夹逼原理,自上而下地搜索。即:若Kx<K0,则沿P0所指的节点向下搜索;若Kx>Kn-1,则沿Pn所指的节点向下搜索;若Ki-1<Kx≤Ki,则沿Pi所指的节点向下搜索。

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

B+树提供的存取路径

  • 通过索引集进行树形搜索

  • 通过顺序集进行顺序搜索

  • 先通过索引找到入口,再沿顺序集顺序搜索

效率

搜索B+树所需的I/O次数决定于其级数L,最多经过L次I/O就可以搜索到,而B+树的级数决定于N(索引属性不同键值的数目),而不是记录数

补充知识

到底什么是稠密索引和非稠密索引

稠密索引每个数据记录的键值对应一个索引项。也就是说,稠密索引为数据记录文件的每一条记录都设一个键-指针对。

非稠密索引不为每个数据记录的键值设立索引项。也就是说,为数据记录文件的每个存储块设一个键-指针对。

到底什么是主索引和次索引

  • 主索引:索引是主键 —— 一个索引只有一个地址对应(如上图所示)

    • 非稠密索引:按主键排序
    • 稠密索引:不按主键排序
  • 次索引:索引不是主键 —— 一个索引可能有多个地址对应(上图地址部分为一个地址列表)

    因为不按主键排序,所以必然是稠密索引

    • 簇集索引:按索引键排序并簇集(地址列表拉链)
    • 非簇集索引:不按索引键排序,也叫无序索引、非簇集的稠密次索引、二次索引

猜你喜欢

转载自www.cnblogs.com/zxuuu/p/12969266.html