【高级数据库】第二章 第04讲 多维索引
【高级数据库】第二章 数据库索引
前面讲解了几种索引的数据结构,但这些索引键都是一维的。对于多维查询(例如查询同时满足两个键的记录),可以通过多次执行一维索引实现,但对于更加复杂的数据这种方法显然不可取,因此需要扩展多维索引。多维索引结构主要分为两类:
(1)类散列表:包括网格文件、分段散列;
(2)类树:包括多键索引、kd-树、四叉树、R-树。
最后我们会拓展一种特别的索引结构——位图索引。
第04讲 多维索引
1、多维数据的散列结构
多维数据的散列结构包括网格文件和分段散列,下面介绍网格文件:
1.1 网格文件
网格文件是一种改进单维索引的数据结构,根据查询的范围可以为每一个维度划分三个区域,形成网格状。假设有一个查询涉及到两个查找键 X , Y X,Y X,Y ,查询的范围为 X ∈ [ 40 , 55 ) , Y ∈ [ 90 , 225 ) X\in[40,55),Y\in[90,225) X∈[40,55),Y∈[90,225),因此可以分别在两个维度上划分三个区域,形成九个网格,每个网格内存储的是符合 X , Y X,Y X,Y 所在范围内的记录,其指针指向对应的桶,假设桶中最大存储2个记录。如图所示:
左图为网格文件,一共划分9个区域,其中正中间区域即为查询的部分,右图表示每个网格对应的桶,所要查询的桶即为红色区域及对应的记录。
(1)网格文件的查询:当要查询指定范围的记录时,根据查询键的数量建立对应维度的网格文件,其次为每个区域设计或选择合适的散列函数,将次区域映射到对应的桶地址(或桶中第一个记录的地址),然后取出桶中全部数据即可。
(2)网格文件的插入:遵循查询方法的同时,需要向桶中插入新记录及键,如果桶未满则直接插入即可,否则需要解决溢出问题。
一般解决溢出问题,可以设置一个溢出块,即在桶的基础上扩充新的空间;另一种则是重新划分网格线。例如插入一个数据 ( X = 52 , Y = 200 ) (X=52,Y=200) (X=52,Y=200),可知其所在中间的网格,但其空间已满,此时可以添加一个水平网格线 Y = 130 Y=130 Y=130 将该桶划分为两个。划分桶需要注意尽可能的减少空桶的数量(完全不产生空桶是不可能的,因此需要尽可能减少),如图:
1.2 分段散列
分段散列通常是设计一个散列函数可以对多维数据同时进行索引。例如二维数据 ( X , Y ) (X,Y) (X,Y),通常设计一个散列函数 h ( X , Y ) h(X,Y) h(X,Y) 将两个键分别转换为二进制表示。设散列值维度为 k k k ,对应的键分别为 h ( X ) , h ( Y ) h(X),h(Y) h(X),h(Y) 维度为 k X , k Y k_X,k_Y kX,kY ,且有 k X + k Y = k k_X+k_Y=k kX+kY=k 。例如对于如下8个二维键:
其中第一个键 X X X 我们划分0表示奇数和1表示偶数,第二个键 Y Y Y 划分模4的余数,0表示余数为0,1表示余数为1,2表示余数为2,3表示余数为3,因此可以组合为三个二进制数。例如对于 ( 25 , 60 ) (25,60) (25,60) 则有 h ( 25 , 60 ) = 100 h(25,60)=100 h(25,60)=100。所有数据的索引图如图所示:
可以发现,分段散列表可以使用链地址法存储,左侧表示数组,数组下标恰巧为二进制键值的十进制表示,数组存储指向对应桶的指针,每个结点可以是固定尺寸的存储快,也可以用链表依次相连。
2、多维数据的树结构
除了散列结构外,树结构也可以用于多维数据的索引,包括四种树形结构:多键索引、kd-树、四叉树和R-树。前三种用于点集,R-树用于点集或区间集。
2.1 多键索引
多键索引是指在树上对每个结点设置索引的数据结构。假设有二维键 ( X , Y ) (X,Y) (X,Y),则根结点是第一个键 X X X 的索引,其次第二层上的结点则是 Y Y Y 对应的索引。如图所示:
例如查询 ( X = 50 , Y = 120 ) (X=50,Y=120) (X=50,Y=120) 的记录,首先在根结点查询键为50的指针,其次根据指针索引第二层第四个树结点,在依次进行匹配。如果维数超过2维,则在基础上继续添加一层用于对第三个键添加索引。此存在一个问题是树根结点默认的为键 X X X 设置索引,而如若首先查询 Y Y Y 的键,则只能在第二层一个个查询了。
2.2 kd-树
kd-树是一种将二叉搜索树推广到多维数据的数据结构,其每个内结点只代表一个属性(键),左右孩子分别是对应属性(键)根据某一个值划分的两部分。如图:
这是一个二叉排序树,也非常像机器学习中的决策树,其最终的记录全部存在叶子结点上。如若插入一个新记录,首先进行查找,如果找到其所在额叶子结点对应的桶中还有空间,则插入,否则执行结点分裂,这与【B-树】一节的插入操作一样。
2.3 四叉树
四叉树相比于kd-树来说划分的角度不同。kd-树是每个结点仅划分一个属性,而四叉树是划分多个属性的组合。例如二维键 ( X , Y ) (X,Y) (X,Y) ,四叉树的每个内部结点则是根据当前的值 ( X , Y ) (X,Y) (X,Y) 划分四个区域,按照坐标象限的顺序定义,分别为
I : { ( x , y ) ∣ x > X , y > Y } \text{I}:\{(x,y)|x>X,y>Y\} I:{(x,y)∣x>X,y>Y}
II : { ( x , y ) ∣ x ≤ X , y > Y } \text{II}:\{(x,y)|x\leq X,y>Y\} II:{(x,y)∣x≤X,y>Y}
III : { ( x , y ) ∣ x ≤ X , y ≤ Y } \text{III}:\{(x,y)|x\leq X,y\leq Y\} III:{(x,y)∣x≤X,y≤Y}
IV : { ( x , y ) ∣ x > X , y ≤ Y } \text{IV}:\{(x,y)|x>X,y\leq Y\} IV:{(x,y)∣x>X,y≤Y}
最终叶子结点存储对应的桶,假设桶最大存储空间为2。
当然如果当前结点划分后区域内已经满足小于等于2个记录,则终止划分,否则继续划分。如图所示:
这是一个四叉树的划分图,第一次划分以 ( X = 50 , Y = 200 ) (X=50,Y=200) (X=50,Y=200) 点对应的四个区域,其中 I I I 和 I I I III III 象限内恰巧有两个记录,则停止划分,另两个结点对应超过2个记录,因此继续划分。一个维度上的划分点取当前区间范围内的中位数。
2.4 R-树(区域树)
R-树是可以查询指定一个区域,其每个结点表示一个区域范围,且这个结点的子结点区域是这个结点区域的子集,所有子结点的区域可重叠。例如:
外面的实线框表示R-树中的一个内部结点,该结点存储两个坐标(左上角和右下角的坐标),其子结点包含四个(相当于四个孩子结点),每个子结点与这个结点一样存储两个坐标。因此四个孩子结点表示的区域为虚线框。叶子结点也表示一个区域,这个区域内对应的内容即为记录。
当查询一个指定区域时,即可通过坐标大小比较方法缩小区域,直到找到指定的叶子结点。若在指定区域内插入一个记录,则首先进行查询,若叶子结点对应的桶有空余空间,则直接插入,否则需要分裂叶子结点,分裂方法与前述一样。
另一种索引用于描述多维数据的方式是位图索引。位图索引目标是为指定字段相应不同取值进行向量化表示。
3、位图索引
假设一文件包含记录 n n n 个,字段(属性) m m m 个,所有记录中第 k k k 个字段可有 m k m_k mk 个取值。因此对于第 k k k 个字段的第 t t t 个取值可用0-1向量表示,其中第 i i i 位为1表示第 i i i 个记录当前字段取第 t t t 个值;0表示不取该值。
例如一文件包括两个字段 A , B A,B A,B,分别取值范围为 A = { 1 , 2 , 3 } A=\{1,2,3\} A={1,2,3}, B = { a , b , c } B=\{a,b,c\} B={a,b,c}。一共有6个记录,分别是 ( 2 , c ) , ( 3 , c ) , ( 2 , a ) , ( 3 , b ) , ( 1 , b ) , ( 2 , a ) (2,c),(3,c),(2,a),(3,b),(1,b),(2,a) (2,c),(3,c),(2,a),(3,b),(1,b),(2,a)。于是字段 A A A 的位图索引为:
字段A取值 | 向量 |
---|---|
1 | 000010 |
2 | 101001 |
3 | 010100 |
可发现当所有取值对应的向量做按位或运算后将变成全1向量,其表示的含义是当前字段 A A A 取任意值,而任意几个取值对应的向量按位或,就代表对字段 A A A 的范围查找。例如查找 A A A 取值在2-3之间的所有记录,则可以直接将向量101001和010100按位或运算,得到111101,即满足的记录的编号有1、2、3、4、6。
若多个键联合查询,则对应每个字段满足条件的值对应的向量按位或运算,不同键之间根据逻辑进行运算,例如查询 w h e r e A = 2 / 3 and B = b where A=2/3 \textbf{and} B=b whereA=2/3andB=b,则分别对A和B字段按位或,得到的两个向量按位与运算,若查询 w h e r e A = 1 or B ! = b where A=1 \textbf{or} B!=b whereA=1orB!=b,则对A按位或,对除B=b外按位或,得到的两个向量再按位或。因此可发现位图索引可以满足多关键字范围查找,仅需要向量的按位或或按位与运算。
上一讲:散列表
下一讲:查询执行
博客记录着学习的脚步,分享着最新的技术,非常感谢您的阅读,本博客将不断进行更新,希望能够给您在技术上带来帮助。
【高级数据库】第二章 第04讲 多维索引相关推荐
- 计算机的定点运算器原理,计算机组成原理第二章第10讲定点运算器的组成.ppt
<计算机组成原理第二章第10讲定点运算器的组成.ppt>由会员分享,可在线阅读,更多相关<计算机组成原理第二章第10讲定点运算器的组成.ppt(20页珍藏版)>请在装配图网上搜 ...
- 计算机组成原理乘法运算说明过程,计算机组成原理第二章 第8讲 定点乘法运算...
计算机组成原理第二章 第8讲 定点乘法运算 (34页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.90 积分 定点乘法运算,,2.3 定点乘法运算,2 ...
- 计算机组成原理机器码怎么求,计算机组成原理第二章第3讲数的机器码表示.ppt...
<计算机组成原理第二章第3讲数的机器码表示.ppt>由会员分享,可在线阅读,更多相关<计算机组成原理第二章第3讲数的机器码表示.ppt(55页珍藏版)>请在人人文库网上搜索. ...
- 计算机组成原理加法减法运算,计算机组成原理第二章第5讲定点加法减法运算课件...
计算机组成原理第二章第5讲定点加法减法运算课件 一般搬家时转盘与大梁间是固定的,开钻前应根据转盘对井架进行校正,如果中途换转盘,则要在空负荷下根据井架对转盘进行校正 一般搬家时转盘与大梁间是固定的,开 ...
- 【高级数据库】第二章 第03讲 散列表
[高级数据库]第二章 数据库索引 第03讲 散列表 1.散列表的构造 通过对关键字与存储地址之间建立的映射结构称为散列函数(哈希函数或哈希映射),通过散列函数将关键字映射到的值称为散列地址( ...
- 【高级数据库】第二章 第01讲 数据库索引
[高级数据库]第二章 数据库索引 在第一章我们主要介绍了数据库的基础知识,包括数据库和数据库管理系统的概念,了解了数据库管理系统是如何执行用户命令的.另外还回顾了数据库有关的基础内容,包括三级模式 ...
- JavaScript 高级程序设计第二章
第二章 教材: JavaScript 高级程序设计 目录 第二章 一. script元素 1. 介绍 2. 标签位置 2.1. 推迟执行脚本---defer属性 2.2. 异步执行脚本---async ...
- 数据库——第二章关系运算题整理
设有一个SPJ数据库,包括S.P.J和SPJ4个关系模式: 供应商-零件-工程项目数据库由以下四个关系模式构成: S(SNO,SNAME,STATUS,CITY) P(PNO,PNAME,COLOR, ...
- 企业网络高级技术第二章STP实验
STP spanning tree protocol 生成树协议 STP产生的原因:在实际的网络环境中,物理环路可以提高网络的可靠性,当一条线路断掉的时候,另一条链路仍然可以传输数据.但是,在交换 ...
最新文章
- 程序模拟抽奖流程图_一道与联欢会相关的概率统计题目的模拟仿真
- 2021暑假每日一题 【week6 完结】
- HDOJ 2546饭卡(01背包问题)
- JS移动客户端--触屏滑动事件 banner图效果
- 2018 总结 2019 展望
- 【翻译】WF从入门到精通(一)
- 今日恐慌与贪婪指数为77 贪婪程度有所上升
- webpack ,react
- java开发课程表_Java开发人员课程包,折扣高达86%
- android编写蓝牙工具类,【Android BLE】蓝牙开发「防丢器」的相关知识点(三):手机与设备之间指令传输...
- arcgis下载并部署/替换底图服务/IIS跨域--参考资料链接
- 2022年认证杯SPSSPRO杯数学建模A题(第二阶段)人员的紧急疏散求解全过程文档及程序
- WIFI 2.4G及5G信道划分表(附无线通信频率分配表)
- LiveZilla 详细 配置 设置 (一) 安装 wamp
- 【DOORS】产品功能介绍
- JS做的一款动感超酷banner
- Ubuntu安装桌面
- uni-app 什么是datacom?
- 排序-JAVA实现【四】堆排序
- 肠道菌群检测粪便样本的采集保存方法
热门文章
- 电脑如何压缩jpg图片的大小?怎么把jpg图片kb变小?
- folly库的安装-Ubuntu18.04
- Apple Configurator 给 Apple TV 安装证书
- 如何关闭OPPO手机服务器维护,opporeno4如何关闭天气预警功能 oppo手机天气预警功能一键关闭关闭方法分享...
- 【转】photoshop制图的165种技巧
- 通过wine使用通达信、钱龙、同花顺、大智慧软件
- CSPNet 论文学习
- 长安车机的安装拦截分析(安装应用部分)
- 夜游项目如何刺激城市经济活力和潜力
- php lrange,PHP+Redis实战教程(3):list列表类型