基于谓词过滤是任何现代数据库最基本的操作之一,加速过滤器表达式的执行可以显著提高数据库查询优化器的效率。过去常用的提高过滤效率的方法包括:聚集索引、多维索引及二级索引(选择度较高时)。但这些传统索引方法都难以调节,而且表现极不稳定。后续会
基于学习的多维索引方法(FLOOD,后文介绍)可以根据数据集和工作负载自动优化索引结构。但是对查询倾斜和数据相关度高的数据效果不是很乐观。
一种二叉空间分割树。在每个节点上基于不同维度的中值划分,直到每个叶子节点的点数少于一页的存储范围。每个叶子节点区域的点个数大致相等 如下图
k-d树缺点:只基于数据进行构建,没有考虑查询负载,有可能划分的大部分索引点都不会有查询经过造成大量空间的浪费。
传统多维索引缺点:
workflow:输入一个n维数据->CDF->divide into n partitions->n dimension grid->storage
CDF:概率密度函数;根据CDF将每个维度分割成等量的k个部分(k是学习来的);n维数据,每个维度分成\(k_i\)个部分,互相交叉形成包括\(\prod_{k_i}\)个单元格的网格,每个单元格中包括满足各个属性范围的数据点。每个网格中的数据点都是连续存储的。
FLOOD优点:
FLOOD不足:
FLOOD只参考平均查询频率来调整网格大小,当查询负载倾斜或查询不一致时,效率会大大降低。
当数据相关密切时,会导致各个单元格中的数据量差异较大,会降低索引的性能和存储空间使用率。
Tsunami的提出主要是为了解决FLOOD中对倾斜查询负载和处理相关数据时的效率下降问题。
针对FLOOD对倾斜负载查询的不稳定性,Tsunami采用网格树的模式进行解决。
针对FLOOD对相关数据的不稳定性,Tsunami采用了增强网格进行解决。
基本想法与FLOOD基本一致。不同的是划分网格的依据。
(1)将当前属性视为独立属性,根据CDF(x)均匀分割
(2)如果X,Y存在单调映射,可以利用Y的过滤结果代替X的过滤结果
(3)用CDF(x|y)做均匀分割
(#^.^#)
(#^.^#)
(#^.^#)
(#^.^#)
(#^.^#)
(#^.^#)
(#^.^#)
(#^.^#)
(#^.^#)
觉得有帮助的话给笔者点个赞吧!O(∩_∩)O
手机扫一扫
移动阅读更方便
你可能感兴趣的文章