




已阅读5页,还剩75页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第五章数据库存储结构 在SQL标准中 数据库按三级模式构建 它们是 视图 子模式 基本表 模式 存放数据的操作系统文件 存储模式 这一章我们重点讨论 DBMS如何把基本表 索引等数据存储到磁盘文件中 以及如何提高查询速度等问题 学习这些知识的目的是 更好地设计你的数据库及配置你的数据库参数 使系统效率更高 第五章内容 5 1存储介质介绍5 2存储结构5 3索引技术 5 1存储介质 一个数据库最终要存储到计算机的存储设备中 因此 我们首先介绍一下数据库系统所涉及到的计算机存储设备 5 1 1存储介质层次 一个数据库在运行过程中 涉及多种存储设备 我们按存储器中数据被DBMS使用的顺序 把存储器分为三级 内存作为一级存储器 存放DBMS当前正在使用或正要使用的数据库数据 硬磁盘作为二级存储器 存放整个数据库 这些数据可能随时被DBMS调入内存 1 内存 磁盘 磁带 光盘等作为三级存储器 存放数据库的备份 当磁盘中的数据库遭到破坏时 用数据库的备份来恢复 如图所示 存储器分三级结构图 一级 二级 三级 5 1 2内存 内存中存放系统正在使用或正要使用的数据 内存由操作系统来管理 操作系统为数据库在内存中开辟一块区域 用来存放数据库的数据和日志 如图所示 5 1 2内存中的数据库示意图 数据库的数据缓冲区 数据库的日志缓冲区 数据页 数据页 数据页 内存 5 1 3硬磁盘 硬磁盘又称温切斯特盘 Winchester 它的工作原理是 在一个塑料盘片上涂上小磁粉颗粒 颗粒有磁时表示 1 无磁时表示 0 结构如图所示 1 磁盘结构 柱面 2 技术指标 盘片 一个硬盘由一组两面涂有磁粉的盘片组成 磁道 为了在盘片上存储信息 必须把盘片分成若干个同心圆 然后在其上存储信息 我们把这些同心圆称为磁道 扇区 扇段或盘块 为了读取信息方便 我们用扇形把磁道等分成若干段 我们称它们为扇段 扇区或盘块 磁盘上的所有扇段 不论扇段的长短 都存储相同容量的信息 盘块大小与操作系统有关 一般是512KB 盘块是OS寻址的最小单位 既OS向磁盘读写数据的最小单位 2 技术指标 柱面 我们把由所有盘面上相同磁道所够成的哪一部分存储空间 称为一个柱面 磁盘容量 盘片总数 2 每个盘面的磁道数 磁道的盘块数 每个盘块的字节数在磁盘上定位数据 操作系统通过 柱面号 磁头号 盘块号 三个参数来定位磁盘上的数据 OS对整个盘的盘块进行统一编址 编址的方法是 2 技术指标 假如磁盘有20个盘面 每面上有200个磁道 每个磁道上有17个扇段 柱面编号 由内向外依此编为0 1 2 199 磁道编号 磁道编号按柱面号顺序进行编号 0柱面的20个盘面上的磁道从上到下编为 0 1 2 19 1柱面的20个盘面上的磁道从上到下编为 20 21 39 依此类推 盘块编号 盘块编号按磁道号顺序编写 0号磁道上的17个扇段依此编为0 1 2 16 1号磁道上的17个扇段编为17 18 33 依此类推 3 磁盘文件 操作系统对存储到磁盘中的数据 采用文件形式进行管理 每个文件有一个文件名 数据存储在文件中 操作系统为每个磁盘创建一个文件分配表结构如下 3 磁盘文件 3 磁盘文件 一个文件包含多个盘块 盘块之间指针链接起来 一个盘块只存储一个文件的数据 既一个盘块不能存储不同文件文件的数据 当用户要访问文件时 操作系统首先从磁盘的文件分配表中找到此文件 然后根据文件分配表的信息将该文件的盘块调入内存 操作系统从磁盘往内存调数据的最小单位是一个盘块 扇区 5 1 4磁盘阵列 目前 数据库中的数据量越来越大 数据的安全性要求越来越高 用单块磁盘存储数据库数据已不满足要求 1987年 Gibson和Katz在加洲大学伯克利分校发表文章 首先提出了 磁盘阵列 概念 5 1 4磁盘阵列 独立冗余磁盘阵列最初叫做廉价冗余磁盘阵列 RedundantArrayofInexpensiveDisks 它是由多个类型 容量 接口 甚至品牌一致的小容量 独立的硬盘组成的阵列 而阵列综合的性能可以超过单一昂贵大容量硬盘 SLED 的性能 由于是对多个磁盘并行操作 所以RAID磁盘子系统与单一磁盘相比它的输入输出性能得到了提高 服务器会把RAID阵列看成一个单一的存储单元 并对几个磁盘同时访问 所以提高了输入输出的速率 5 1 4磁盘阵列 RAID技术主要包含RAID0 RAID7等数个规范 它们的侧重点各不相同 具体如下 1 RAID0 RAID0连续以位或字节为单位分割数据 并行读 写于多个磁盘上 因此具有很高的数据传输率 但它没有数据冗余 因此并不能算是真正的RAID结构 RAID0只是单纯地提高性能 并没有为数据的可靠性提供保证 而且其中的一个磁盘失效将影响到所有数据 因此 RAID0不能应用于数据安全性要求高的场合 RAID0示意图 2 RAID1 它是通过磁盘数据镜像实现数据冗余 在成对的独立磁盘上产生互为备份的数据 当原始数据繁忙时 可直接从镜像拷贝中读取数据 因此RAID1可以提高读取性能 RAID1是磁盘阵列中单位成本最高的 但提供了很高的数据安全性和可用性 当一个磁盘失效时 系统可以自动切换到镜像磁盘上读写 而不需要重组失效的数据 RAID1示意图 3 RAID0 1 这种模式其实是RAID0和RAID1的组合 它至少需要四块盘 先由两块盘够成RAID0阵列 再把两个RAID0阵列构成RAID1阵列 优点是 既可提高数据的可靠性 又可适当提高读写速度 RAID0 1示意图 5 2数据库的存储结构 数据库最终要存储到计算机的磁盘中 而磁盘是由操作系统的文件管理子系统来管理的 大家知道操作系统对存储在磁盘中的数据是以文件形式来管理的 因此DBMS对数据库的存储结构设计必须符合操作系统的文件技术规范 我们先来看看操作系统文件的相关概念 5 2 1操作系统文件简介 操作系统逻辑文件是指用户 应用程序所感知道的文件组织形式 从结构上可分成两大类 字符流式无结构文件和记录式有结构文件 而记录式有结构文件又可进一步分为 连续结构 多重结构 转置结构 顺序结构四种 从存取方法上可分为 顺序存取 随机存取 按键存取三种 5 2 1操作系统文件概述 存储数据库数据的数据库文件采用的是OS的记录式有结构文件 如图所示 记录式有结构文件示意图 OS结构文件 记录的结构 STRUCTStudent SIDString SNameString BirthDayDateTime 5 2 2数据库文件的记录结构设计 数据库中各种数据的结构不相同 那么 我们应如何设计数据库文件的记录结构 才能使数据库的各种数据都能存储在文件中呢 这里面临的问题是 数据库文件的记录是采用定长结构还是变长结构 这就是文件组织问题 1 定长记录 所谓定长记录结构就是文件的记录采用统一的长度 定长记录结构的文件如图所示 数据库中的 学生 表 数据库中的 课程 表 数据库文件 2 变长记录 所谓变长记录结构就是存储数据的文件记录不采用统一的长度 变长记录结构如图所示 分槽式页结构 记录大小 记录位置 5 2 3数据库文件中记录的逻辑联系 在数据库中 基本表之间是有联的 基本表的元组之间是有顺序的 那么如何在数据库文件中体现出这些联系和顺序 以便我们能实现对数据的快速查找呢 显然 应该通过文件的 记录 之间的逻辑顺序和联系来体现 记录式文件的记录组织结构有以下四种 1 堆文件 在这种组织中 记录可以放在文件的任何位置 一般以输入顺序为序 记录的存储顺序与关键字无关 插入记录总是在文件尾部 2 顺序文件 在这种组织中 记录是按查找键值升序或降序顺序存储 3 散列文件 按记录的某个数据项的值 通过散列函数求出一个散列值 然后用此值作为该记录的存储位置值 4 聚集文件 在这种组织中 一个文件可以存储多个关系的元组 这样一来 能提高对多个关系之间进行联接查找的速度 5 2 4SQLServer数据库的存储结构 从存储角度看 一个SQLServer数据库由若干个文件组构成 1 n 256 一个数据库至少要有一个主文件组 PRIMARY 一个文件组可以包含若干个文件 一个数据库文件的总数 1 m 32767 一个数据库必须有一个主文件 主文件的扩展名为 mdf 其它文件称为次要文件 次要文件的扩展名为 ndf 5 2 4SQLServer数据库的存储结构 系统为每个文件分配一个唯一标识号 例如01 02 1 基本表与文件组之间的关系 用户只能指示把表放在哪个文件组中 不能直接指示把表放到哪个文件中 如果一个文件组包含多个文件 例如 两个表 那么系统将存放在该文件组的基本表的数据平均地分配到各文件中 2 SQLServer数据库文件 一个SQLServer数据库由数据文件和日志文件两类文件组成 数据文件用来存储数据库各种对象的数据 例如 表 视图 存储过程等 日志文件用来记录事务对数据的更新 数据文件的结构如下图所示 数据文件结构图 页 页 页 页 页 一般我们把数据库的数据文件称为数据库文件 数据库文件有一系列 页 构成 数据文件页编号 数据文件的页按顺序编号 文件首页的页码是0 每个文件都有一个文件ID号 在数据库中唯一标识一页需要同时使用文件ID和页码 3 页 SQLServer数据存储的基本单位是页 一个页对应8K连续的磁盘块 页是SQLServer进行内 外存数据交换的最小单位 每页的开始部分是96字节的页首 用于存储系统信息 如页的类型 页的可用空间量 拥有页的对象的对象ID等SQLServer页有以下类型 页结构图 行偏移量 4 页与表中元组之间关系 在SQLServer中 行不能跨页 在SQLServer2000中 一行内最多包含的数据量是8060字节 不包括text ntext和image数据 4 页与表中元组之间关系 由上述规定可知 基本表的每行字节数 8 060 既创建表时 各字段的最大占用空间总数不能超过8060B 一个表每行字节数越小 一个页中存放该表元组的数量就越多 因此查询速度就越快 5 页组 为了减少内部操作和增加I O效率 SQLServer在向表和索引分配存储空间时是按页组分配的 一个页组 扩展盘区 等于8个连续页 即64KB 5 3索引 表中的元组在磁盘中只能有一个物理存储位置 而用户每次查找元组时 所要的元组顺序 逻辑顺序 经常与元组的存储顺序 物理顺序 不一致 如果每次DBMS都按元组的存储顺序去扫描元组 查找速度可能会很慢 这很像去图书馆借书 书在书库有个存放顺序 物理顺序 如果你按这个顺序去找书 最好情况是一次就找到了你所要的书 最坏情况是把书库中的书整个查找一遍 最后才找到你所要的书 总之 平均速度很慢 5 3索引 那么 图书馆是怎么解决这个问题的呢 图书馆是为每本书建立一些卡片 在卡片中记录书的基本信息及其所在位置 然后按某种逻辑顺序 例如 出版业 作者 书所属的学科 将卡片放在一起 这便构成了书的各种逻辑顺序 他们称此为 图书目录 或 图书索引 我们在数据库中也可以使用此方法 5 3索引 对 基本表 的元组 按某个或某几个字段值的某种顺序 逻辑顺序 建立一个目录文件 此目录文件按逻辑顺序排列元组 并记录元组的存储位置 我们把这种目录文件称为该表的索引 索引文件结构如图所示 索引 元组在文件中的顺序 索引图1 索引 元组在文件中的顺序 索引图2 5 3 1索引概念 1 查找键用于查找元组 记录 的属性集 它不一定是关系的主键 2 主文件存放关系的磁盘文件 3 元组 记录 的物理位置 顺序元组在存储文件 主文件 的存储位置 顺序 5 3 1索引概念 4 索引文件对一个关系的记录按某个查找键值的某种顺序建立的文件 索引文件简称索引 5 记录的索引顺序 逻辑顺序 记录在索引文件的排列顺序 6 索引文件的开销索引可以提高查询速度 但索引是需要系统付出代价的 这体现在以下两个方面 5 3 1索引概念 空间代价索引需要占用存储空间 维护代价用户一但对索引所在的基本表进行插入 删除操作或对基本表元组的查找键值进行修改操作 DBMS就要重新整理 维护 索引 因此我们可以得出以下结论 5 3 1索引概念 对一个基本表来说 不是索引建的越多越好 尽量不要用更新频繁的属性集作为查找键来建立索引 5 3 2索引分类 对于一个基本表来说 索引可以分为聚集索引和非聚集索引两大类 1 聚集索引查找键值在索引中顺序与在主文件中的物理存储顺序保持一致 2 非聚集索引查找键值在索引中顺序与在主文件中的物理存储顺序不保持一致 5 3 3SQLServer的索引概念 1 聚集索引在聚集索引中 表中各行的物理顺序与索引顺序保持一致 一个表只能有一个聚集索引 如图2 SQLServer默认地用每个表的主键做为查找键来为表创建聚集索引 5 3 3SQLServer的索引概念 2 非聚集索引在非聚集索引中 表中各行的物理顺序与索引顺序不保持一致 一个表最多只能有249个非聚集索引 如图1 5 3 3SQLServer的索引概念 3 唯一索引唯一索引可以确保索引列不包含重复的值 在多列唯一索引的情况下 该索引可以确保索引列中每个值组合都是唯一的 聚集索引和非聚集索引都可以是唯一的 因此 只要列中的数据是唯一的 就可以在同一个表上创建一个唯一的聚集索引和多个唯一的非聚集索引 3 唯一索引 只有当唯一性是数据本身的特征时 指定唯一索引才有意义 如果必须实施唯一性以确保数据的完整性 则应在列上创建UNIQUE或PRIMARYKEY约束 而不要创建唯一索引 例如 如果打算经常查询雇员表 主键为emp id 中的社会安全号码 ssn 列 并希望确保社会安全号码的唯一性 则在ssn列上创建UNIQUE约束 3 唯一索引 创建PRIMARYKEY或UNIQUE约束会在表中指定的列上自动创建唯一索引 在同一个列组合上创建唯一索引而不是非唯一索引可为查询优化器提供附加信息 所以最好创建唯一索引 5 3 4使用索引的原则 1 索引使用的一般原则 衡量是否为一个表建立索引的原则 对数据量很大 并且查询频度高的表要建立索引 覆盖的查询可以提高性能 覆盖的查询是指查询中所有指定的列都包含在同一个索引中 衡量是否为一个表建立索引的原则 对小型表进行索引可能不会产生优化效果 因为SQLServer在遍历索引以搜索数据时 花费的时间可能会比简单的表扫描还长 一个表如果建有大量索引会影响INSERT UPDATE和DELETE语句的性能 因为在表中的数据更改时 所有索引都须进行适当的调整 衡量是否为一个表建立索引的原则 应使用SQL事件探查器和索引优化向导帮助分析查询 确定要创建的索引 1 索引使用的一般原则 衡量是否为一个列创建索引的原则应考虑被索引的列是否以及如何用于查询中 索引对下列查询很有帮助 搜索符合特定搜索关键字值的行 精确匹配查询 精确匹配比较是指查询使用WHERE语句指定具有给定值的列条目 例如 WHEREemp id VPA30890F 衡量是否为一个列创建索引的原则 搜索其搜索关键字值为范围值的行 范围查询 范围查询是指查询指定其值介于两个值之间的任何条目 例如 WHEREjob lvlBETWEEN9and12或WHEREjob lvl 9andjob lvl 12 衡量是否为一个列创建索引的原则 在表T1中搜索根据联接谓词与表T2中的某个行匹配的行 索引嵌套循环联接 在不进行显式排序操作的情况下产生经排序的查询输出 尤其是经排序的动态游标 在不进行显式排序操作的情况下 按一种有序的顺序对行进行扫描 以允许基于顺序的操作 如合并联接和流聚合 衡量是否为一个列创建索引的原则 以优于表扫描的性能对表中所有的行进行扫描 性
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025个人按揭付款购销合同
- 2025年人体解剖学常见器官解剖与生理试卷答案及解析
- 费县2024-2025学年第二学期六年级科学期末学业测评试题含参考答案
- 房产合作协议合同3篇
- 2025企业合同管理指南合同参考模板
- 2025撤销购房合同协议
- 2025年智能电网行业市场前瞻:电力需求侧响应策略与技术创新分析报告
- 井下机车运输工专项考核试卷及答案
- 2025高效仓储管理合同样书
- 绿色金融债券市场发行政策变化对2025年投资收益的影响分析报告
- 新疆城市绿地养护管理标准
- 环形开挖预留核心土法
- 店长管理培训:店务管理
- 医院成立房颤中心文件
- 妇科医生进修汇报课件
- 《科室管理方案》课件
- 农业机械操作安全的培训课程
- 景观设计投标书模板
- 综合医院危重患者院内转运发生意外情况应急预案
- 电镀行业环境保护现状课件
- 最全看图猜成语 课件
评论
0/150
提交评论