法律状态公告日
法律状态信息
法律状态
2018-03-13
未缴年费专利权终止 IPC(主分类):G06F17/30 授权公告日:20140702 终止日期:20170120 申请日:20120120
专利权的终止
2014-07-02
授权
授权
2012-09-26
实质审查的生效 IPC(主分类):G06F17/30 申请日:20120120
实质审查的生效
2012-07-25
公开
公开
技术领域
本发明涉及一种基于列存储的连接顺序查询优化方法。
背景技术
随着信息时代数据量的爆炸式增长,在海量数据分析处理的需求驱动下,数据仓库、 数据挖掘、决策支持等分析型应用迅速发展。此类应用的特点是数据量大,查询密集,更 加关注属性而非实体。列存储技术在物理上以列为单位对数据表进行拆分,将相同列的数 据连续存储,在查询过程中只需读入查询相关列,避免不相干数据的读入,从而能够极大 程度地提高分析型查询的效率。
但是,数据组织结构的改变使列存储系统避免操作无关列数据的同时,带来了新的问 题。由于上层逻辑数据模型与物理存储模型之间的不一致性,列存储系统在查询执行过程 中需要连接相关列,将其组织成最终的结果返回给用户。查询的相关列越多,列之间的连 接操作也越复杂,将耗费不小的开销。查询优化在数据库领域一直占有重要的地位,然而 现有列存储系统多数通过优化底层数据组织结构或者建立辅助物理结构以适应上层查询, 在早期查询优化阶段,很少考虑列存储的特性,因此难以保证能够获得“最佳”的优化结 果。如何尽早根据列存储的特点进行查询优化,特别是对连接顺序进行优化,成为一项迫 切需要解决的任务。
发明内容
本发明的目的是提供一种基于列存储模型的连接顺序查询优化方法,以获得在分析型 应用下效率更高的查询执行计划。
为了达到上述本发明的目的,本发明的技术方案是提供了一种基于列存储模型的查询 优化方法,其特征在于,步骤为:
步骤1、接收用户按关系表进行的SQL查询输入,记为select L from R1,...,Rm where ∧/∨(A1,......An)。其中Ri为关系表,L是关系的属性集,A1,......,An是由与节点或者 或节点连接的谓词;
步骤2:将上述SQL语句转换为按二元表进行的查询,记为select L from(K1×K2×......) where∧/∨(A1,......An),其中,Ki是查询相关的列;
步骤3、初始的逻辑查询计划树生成;
步骤4、为步骤3中产生的逻辑查询计划树进行同表连接顺序优化;
步骤5、根据逻辑查询计划树中保存的连接信息为每个关系表登记连接关系集J;
步骤6、根据关系集J判断关系表的类型,与多个表存在连接关系的为事实表,其余 的为维表;
步骤7、单事实表连接顺序优化;
步骤8、多事实表连接顺序优化。
优选地,步骤3具体包括:
步骤3.1、利用关系代数等价变换规则将作用于同列的一元谓词进行下推并合并;
步骤3.2、将同表的一元谓词结点集通过与节点或者或节点自底向上依次连接成一棵 左深逻辑查询子树,为每个表形成单表查询子树;
步骤3.3、将步骤3.2中产生的所有单表查询子树用JOIN结点自底向上依次连接成一 棵完整的逻辑查询计划树,将不同表列之间的连接条件存储到相应JOIN结点中。
优选的,步骤4对逻辑查询树中的每棵单表查询子树进行连接顺序优化,具体为将产 生最小中间结果的结点置于单表查询子树的最左下端。
优选的,步骤7具体为:对于每个事实表与其关联的维表,将事实表的逻辑查询子树 下推到查询树底层,根据连接选择性从优到劣依次连接与该事实表连接的各维表的逻辑查 询子树,形成一棵左深逻辑查询子树。
优选的,步骤8具体为:将步骤7中产生的左深逻辑查询子树用JOIN结点连接成一 棵紧密树,并根据维表重复情况将相关单事实表查询树中的相应连接条件转移到JOIN结 点中。
本发明的优点是:根据列存储数据组织的特点和分析型查询需求的特征,提供一种基 于列存储模型的连接顺序查询优化方法,生成的查询计划能够尽可能减少数据抽取代价以 及每一步连接时的中间结果,以获得效率更高的查询执行策略。
附图说明
图1为单表查询子树示意图;
图2为逻辑查询计划树示意图。
具体实施方式
为使本发明更明显易懂,兹以一优选实施例详细说明如下。
本发明提供了一种基于列存储模型的查询优化方法,其步骤为:
步骤1、接收用户按关系表进行的SQL查询输入,记为select L from R1,...,Rm where ∧/∨(A1,......An)。其中Ri为关系表,L是关系的属性集,A1,......,An是由与节点或者 或节点连接的谓词
步骤2:将上述SQL语句转换为按二元表进行的查询,记为select L from(K1×K2×......) where ∧/∨(A1,......An),其中,Ki是查询相关的列。若Ki和Kj是同一关系表R的属性, 则称其为同表列。
步骤3、初始的逻辑计划树生成;
1)利用关系代数等价变换规则将作用于同列的一元谓词进行下推并合并。
2)将同表的一元谓词结点集通过与节点或者或节点自底向上依次连接成一棵左深逻 辑查询子树,为每个表形成单表查询子树,如图1所示(图中一元谓词记为SEL())。
3)将上述步骤中产生的所有单表查询子树用JOIN结点自底向上依次连接成一棵完 整的逻辑查询计划树,将不同表列之间的连接条件存储到相应JOIN结点中,如图2所示。
步骤4、同表连接顺序优化:为步骤3中产生的逻辑查询计划树中每棵单表查询子树 进行AND连接顺序优化,其原则为:将选择性最优的结点交换到单表查询子树最左结点的 位置;若该结点涉及的列没有建立聚簇索引,则将其与右兄弟结点交换,然后从建有聚簇 索引的列中选择具有最优选择性的结点,将其与当前最左结点交换。给定单表查询子树, 具体如下:
1)为其每个选择结点计算选择率;
2)找出选择率最小的叶子结点记为min_node;
3)从元数据读取min_node对应列的列值索引value_index情况;
4)如果min_node没有建立列值索引,则从有列值索引的列中找出选择率最小的结点 记为index_min_node;
5)如果min_node建有列值索引或者index_min_node不存在,则将min_node与单表 查询子树最底端左结点互换;
6)如果min_node没有建立列值索引并且index_min_node存在,则将min_node与单 表查询子树最底端左结点的右兄弟互换,并将index_min_node与单表查询子树最底端左 结点互换;
步骤5、根据步骤3逻辑计划树中JOIN结点保存的连接信息为每个关系表R登记连接 关系集(以下简记为J(R))={R,D},D为与关系R有条件连接的关系表组成的集合;
步骤6、根据集合J(R)判断关系表R的类型,若D中存在多个关系表,则R为事实表, 否则为维表;
步骤7、单事实表连接顺序优化:将事实表R对应的单表查询子树下推到查询树底层, 根据连接选择性从优到劣依次连接各维表的单表查询子树。具体方法如下:
1)按连接代价从小到大将J(R)-{R}中各维表进行排序,将所对应的单表查询子树依 次存入队列(以下简记为list);
2)初始化单事实表连接顺序优化后的左深查询树(以下简记为tree)=事实表R所 对应的单表查询子树;
3)从list头部获取一棵单表查询子树,并与上一步中的tree分别作为右、左孩子 结点,生成一棵新的子树,树的根为JOIN结点。
4)重复执行步骤5),直至list为空
5)输出tree,即为单事实表连接顺序优化后的左深查询树。
步骤8、多事实表连接顺序优化
1)按照步骤7中处理单事实表的方法为每个单事实表进行连接顺序优化,得到集合 sub_tree[0,事实表总数-1];
2)初始化连接顺序优化后的查询树(以下简记为seq_tree)=sub_tree[0];
3)将seq_tree以及集合sub_tree的下一个元素分别作为左、右孩子结点,生成一 棵子树,树的根为JOIN结点。
4)重复执行步骤4),直至sub_tree中元素取完,输出seq_tree,即为连接顺序优 化后的查询树。
机译: 一种基于文本查询直接连接电话的系统和方法。
机译: 一种基于文本查询直接连接电话的系统和方法。
机译: 一种用于按顺序接收基于IP的通信连接状态以接收传入通信的方法和计算机程序产品