没有合适的资源?快使用搜索试试~ 我知道了~
第19章数据存储与索引[归纳].pdf
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 136 浏览量
2021-10-12
05:36:51
上传
评论
收藏 683KB PDF 举报
温馨提示
试读
34页
第19章数据存储与索引[归纳].pdf
资源推荐
资源详情
资源评论
第 19 章 数据存储与索引
SQL Server 中数据的存储方式和索引的设置,关系到数据查询和更改时的性能,本章
将主要讲解数据的存储方式和数据库索引。在讲解存储方式时,会遇到一些新的概念,如
区、页等,这些概念比较抽象,读者阅读完本章会有不小的收获。
19.1 数据库对象分配
所有持久数据库对象最终都将以一定的格式保存到硬盘上,在查询和修改数据时需要
对硬盘中的数据进行读写,数据库对象的内在分配势必影响读写数据的性能,本节将主要
讲解数据库对象的分配。
19.1.1 对象的存储
在 SQL Server 中最基本的单位是页, 1 页由 8KB 组成。 数据页是用于存储用户数据的
页,数据页有 3 种不同的类型:
IN_ROW_DATA ,行内数据用于存储堆分区或索引分区。
ROW_OVERFLOW_DATA ,行溢出数据用于存储超过 8060B 行大小限制的
varchar、nvarchar、varbinary 或 sql_variant 列中存储的可变长度数据。
LOB_DATA ,大对象数据用于存储大型对象( LOB )数据类型,例如 xml 、
varbinary(max) 和 varchar(max) 。
数据页大小固定为 8KB ,由页头、数据行和行偏移矩阵组成,
如图 19.1 所示。页头大小为 96B,其中标识了该页的编号、上一
页的编号、下一页的编号、页类型、该页所属对象 ID 、该页空闲
字节数等信息。
对于行内数据, 单个数据行最大为 8060B ,表中的记录都存储
在数据行中,如果记录的总大小超过最大值 8060B 时,表中的变
长字符串数据可以存储在行溢出页面上。对于 varchar(max) 、
varbinary(max) 和 xml 等数据类型由于属于大对象数据类型,所以
将使用专门的大对象数据页来存储。一个给定页上存放的数据,根据表结构及存储数据的
不同而变化。一个所有列都是固定长度的表在每个页面上存储的行数是相同的,变长数据
存储情况则以真实数据长度而定。对于短的数据记录,可以在一页上存放多条记录,在读
写数据时可以减小 IO 消耗。
行偏移矩阵是由 2B 项组成的块。 行偏移矩阵用于表示数据记录在数据行中的偏移量,
图 19.1 数据页内部结构
第 19 章 数据存储与索引
·629·
每条记录在该矩阵中对应一个 2B 的项。偏移矩阵表示了记录在页面上的逻辑顺序,而且
是倒序排列,也就是说最后的 2B 表示第 1 行记录的偏移量。记录在数据行中的顺序并不
一定是按照聚集索引键值顺序来排列的。
除了数据页以外,还有用于存储索引的索引页,存储大对象的大对象数据页等,具体
类型见表 19.1。
表 19.1 页类型
页 类 型 说 明 内 容
Data
数据页
当text in row 设置为 ON时,包含除 text、 ntext 、image、
nvarchar(max) 、varchar(max) 、varbinary(max) 和 xml 数
据之外的所有数据的数据行
Index 索引页 索引条目
Text/Image 大对象页
大型对象数据类型: text 、ntext、image、nvarchar(max)、
varchar(max) 、varbinary(max) 和xml数据。数据行超过 8KB
时为可变长度数据类型列: varchar、nvarchar、varbinary 和
sql_variant
Global Allocation
Map
Shared Global
Allocation Map
全局分配映射页
共享全局分配映射页
有关区是否分配的信息
Page Free Space
页面空间页 有关页分配和页的可用空间的信息
Index Allocation
Map
索引分配映射页 有关每个分配单元中表或索引所使用的区的信息
Bulk Changed Map
大容量修改映射页
有关每个分配单元中自最后一条 BACKUP LOG 语句之后
的大容量操作所修改的区的信息
Differential
Changed Map
差异映射页
有关每个分配单元中自最后一条 BACKUP DATABASE
语句之后更改的区的信息
表的数据行在数据页中存储时,先是存储所有固定长度的列,接下来存储所有变长的
列。除了记录行数据外,还记录状态位、数据长度、列偏移矩阵等信息。
19.1.2 区-管理空间的基本单位
SQL Server 中每 8 个连续的页组成 1 个区( Extent),区是管理空间的基本单位。为
了使空间分配更有效, SQL Server 不会将所有区分配给包含少量数据的表。 SQL Server 包
含两种类型的区:
统一区,为单个对象所有。区中的所有 8 页只能由所属对象使用。
混合区,最多可由 8 个对象共享。区中 8 页的每页可由不同的对象所有。
由于页单位太小, 并且用来管理区分配情况并跟踪可用空间的 SQL Server 数据结构相
对而言比较简单,因此 SQL Server 使用以下两种类型的分配映射表来记录区的分配:
全局分配映射表( GAM ), GAM 页记录已分配的区。每个 GAM 包含 64 000 个
区,相当于近 4GB 的数据。 GAM 用一个 Bit 位来表示所涵盖区间内的每个区的状
态。如果位为 1,则区可用;如果位为 0,则区已分配。
共享全局分配映射表( SGAM ), SGAM 页记录当前用作混合区且至少有一个未
使用的页的区。每个 SGAM 包含 64 000 个区,相当于近 4GB 的数据。 SGAM 用
一个 Bit 位来表示所涵盖区间内的每个区的状态。如果位为 1,则区用作混合区且
SQL Server 数据库技术大全
·630·
有可用页;如果位为 0,则区未用作混合区,或者虽然用作混合区但其所有页均在
使用中。
除了使用 GAM 和 SGAM 表示区的分配情况外,还可使用页可用空间( PFS)记录每
页的分配状态、是否已分配单个页以及每页的可用空间量。 PFS 在每页都有一个字节,记
录该页是否已分配。如果已分配,则记录该页是为空,还是已满 1%~50%、51%~80%、
81%~95%或 96%~ 100%。
在数据物理文件中, PFS 页是文件头页之后的第一页(页码为 1),接着是 GAM 页
(页码为 2),然后是 SGAM 页(页码为 3)。第一个 PFS 页之后是一个大小约为 8000 页
的 PFS 页。在第二页的第一个 GAM 页之后还有另一个 GAM 页(包含 64 000 个区),在
第三页的第一个 SGAM 页之后也有另一个 SGAM 页(包含 64 000 个区)。
索引分配映射( IAM )页将映射分配单元使用的数据库文件中 4GB 部分中的区。当
SQL Server 数据库引擎必须在当前页中插入新行,而当前页中没有可用空间时,它将使用
IAM 和 PFS 页查找要将该行分配到的页, 或者 (对于堆或 Text/Image 页)查找具有足够空
间容纳该行的页。 数据库引擎使用 IAM 页查找分配给单元的区。 对于每个区, 数据库引擎
将搜索 PFS 页,以查看是否有可用的页。每个 IAM 和 PFS 页覆盖大量数据页,因此一个
数据库内只有很少的 IAM 和 PFS 页。这意味着 IAM 和 PFS页通常位于内存中的 SQL Server
缓冲池中,所以能够很快找到它们。
与 GAM 和 SGAM 类似,SQL Server 还提供了如下两种类型的跟踪映射表来记录区的
修改情况:
差异更改映射表( DCM ): DCM 页中使用一个 Bit 位来表示一个区是否在上次完
整备份后被修改过,如果修改过为 1,未修改过则为 0。在进行差异备份时系统将
直接读取 DCM 页中的内容, 将标记为 1 的区进行备份。 如果执行完整备份, 则所
有 DCM 页中的位被置零。
大容量更改映射表( BCM ):BCM 页中跟踪记录了从上次日志备份后被大容量日
志记录操作修改的区。如果上次执行日志备份后,某区被有日志记录的大容量复
制操作修改,对应的 Bit 位为 1,未被修改则为 0。只有在大容量恢复模式下 BCM
页才有用,当执行日志备份时,系统将根据 BCM 页找到已修改的区,将这些区包
括在日志备份中,以便在数据库还原时恢复大容量日志记录操作。
DCM 和 BCM 页都可以表示 640 000 个区,在物理文件中, DCM 和 BCM 页在 GAM
和 SGAM 页之后。
19.2 索 引
数据库中存放了大量的数据,为了能够快速地查找需要的数据, SQL Server 使用了索
引来组织和查找,从而提高了数据访问速度。
19.2.1 索引简介
除了表之外,索引是另一个重要的自定义数据结构,使用索引可以加快从表或视图中
检索行的速度。索引包含由表或视图中的一列或多列生成的键。这些键以一个 B 树的数据
第 19 章 数据存储与索引
·631·
结构进行存储,以便 SQL Server 可以快速有效地查找与键值关联的行。
索引使得数据以一种特定的方式组织起来,从而使数据访问时获得最佳的性能。 SQL
Server 中索引分为聚集索引和非聚集索引。一个表中最多只能有一个聚集索引,但是却可
以有多个非聚集索引。没有建立聚集索引的表叫做堆( Heap)。在进行数据查找时,如果
表中没有可以利用的索引,则查询优化器必须扫描表,对表进行扫描会有许多磁盘 I/O 操
作,并占用大量资源。但是并不是只要建立了索引的表在查询时就一定会使用索引,如果
查询表达式不符合使用索引的规范或者返回的结果集的行数占表总行数的百分比较高,则
系统仍然会扫描表进行查找。
说明: 这里介绍的索引都是指一般数据类型的索引,不包括 XML 类型和空间数据类型
的索引,这两个索引都将在相应的章节中进行介绍。
索引可以是唯一的 (无论是聚集索引还是非聚集索引) ,表示其中的数据并没有重复,
也可以不是唯一的,即多行可以共享同一键值。
SQL Server 中的索引使用标准的 B 树来存储索引信息。 B 树又叫平衡树, 图 19.2 为 B
树的结构示意图,系统通过查找索引中的一个关键值来提供对数据的快速访问。 B 树以相
似的键将记录聚合在一起。 B 树的一个核心就是维护树的平衡,树被实时维护,这样通过
向下遍历这棵树以找到一个数值,并定位一个特定记录只需要经过几次页面访问即可。由
于要维护树的平衡,所以在对数据进行插入、修改和删除时将需要花费一定的资源来修改
B 树。
图 19.2 B 树结构
索引中具有唯一的作为遍历起点的根分页,可能存在中间索引层次以及底层叶子分
页。由于使用 B 树结构, 因此使用索引查找过程中从根出发可以很快找到需要的叶子分页。
索引的中间层次是根据表的行数以及索引行的大小而变化的。若使用较长的键值来创建索
引,一个页中就只能容纳较少的条目,因此该树就需要更多的页,在查询时将会使用更多
的 I/O 操作,所以在创建表的列时,特别是用于索引的列时,应该尽量使用占用空间较短
的数据类型。对于任何索引,无论是聚集的还是非聚集的,叶级别都是按照键的顺序由所
有的键值组成的。
19.2.2 聚集索引
聚集索引确定了数据存储的顺序,表内的数据存储基于聚集索引键值在表内排序。每
SQL Server 数据库技术大全
·632·
个表只能有一个聚集索引,因为数据行本身只能按一个顺序存储。
聚集索引就像是字典的编排方式,所有单词按照字母顺序排列,一本字典中单词的排
列方式只有一种,通过字母排序的好处是在查找某个单词时不需要去查看前面的目录,只
需要任意翻开一页,然后根据当页的单词就能够判断要查找的单词是在此页的前面还是
后面。
说明: 默认情况下,在创建表时若没有指定聚集索引在哪个列上,则系统会为表的主键
创建唯一的聚集索引。
SQL Server 中使用 index_id=1 来标识索引类型为聚集索引。 SQL Server 在使用聚集索
引查找数据时,从 B 树的根开始在索引中向下移动以查找与某个聚集索引键对应的行。由
于 B 树中的数据按照一定的顺序排序,所以就像是做二分查找一样,系统将在索引中移动
以查找该范围的起始键值,然后用向前或向后指针在数据页中进行扫描,从而快速地确定
数据所在的范围。为了查找数据页链的首页, SQL Server 将从索引的根节点沿最左边的指
针进行扫描。图 19.3 显示了聚集索引在单个数据分区中的结构。
图 19.3 聚集索引结构
一般情况下,定义聚集索引键时使用的列越少越好。可考虑具有下列一个或多个属性
的列:
唯一或包含许多不重复的值。
按顺序被访问。
由于保证了列在表中是唯一的,所以定义为 IDENTITY 。
经常用于对表中检索到的数据进行排序。
剩余33页未读,继续阅读
资源评论
czq131452007
- 粉丝: 2
- 资源: 12万+
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于Javascript和微信小程序的Anna设计源码
- 基于Java的仿制品设计源码 - bilibili
- 基于Javascript的影视动画设计源码 - cad
- 基于Java和深度学习的瓦斯浓度预测系统后端设计源码 - 瓦斯浓度预测后端
- Screenshot_20240528_103010.jpg
- 基于Python的新能源承载力计算及界面设计源码 - HAINING-DG
- 基于Java的本科探索学习项目设计源码 - 本科探索
- 基于Javascript和Python的微商城项目设计源码 - MicroMall
- 基于Java的网上订餐系统设计源码 - online ordering system
- 基于Javascript的超级美眉网络资源管理应用模块设计源码
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功