一种基于列存储模型的连接顺序查询优化方法

文档序号:6363742阅读:103来源:国知局
专利名称:一种基于列存储模型的连接顺序查询优化方法
技术领域
本发明涉及一种基于列存储的连接顺序查询优化方法。
背景技术
随着信息时代数据量的爆炸式增长,在海量数据分析处理的需求驱动下,数据仓库、数据挖掘、决策支持等分析型应用迅速发展。此类应用的特点是数据量大,查询密集,更加关注属性而非实体。列存储技术在物理上以列为单位对数据表进行拆分,将相同列的数据连续存储,在查询过程中只需读入查询相关列,避免不相干数据的读入,从而能够极大程度地提高分析型查询的效率。但是,数据组织结构的改变使列存储系统避免操作无关列数据的同时,带来了新的问题。由于上层逻辑数据模型与物理存储模型之间的不一致性,列存储系统在查询执行过程中需要连接相关列,将其组织成最终的结果返回给用户。查询的相关列越多,列之间的连接操作也越复杂,将耗费不小的开销。查询优化在数据库领域一直占有重要的地位,然而现有列存储系统多数通过优化底层数据组织结构或者建立辅助物理结构以适应上层查询, 在早期查询优化阶段,很少考虑列存储的特性,因此难以保证能够获得“最佳”的优化结果。 如何尽早根据列存储的特点进行查询优化,特别是对连接顺序进行优化,成为一项迫切需要解决的任务。

发明内容
本发明的目的是提供一种基于列存储模型的连接顺序查询优化方法,以获得在分析型应用下效率更高的查询执行计划。为了达到上述本发明的目的,本发明的技术方案是提供了一种基于列存储模型的查询优化方法,其特征在于,步骤为步骤I、接收用户按关系表进行的SQL查询输入,记为select L from R1, , Rm
where Λ / V (A1,......An)。其中Ri为关系表,L是关系的属性集,A1,......, An是由与
节点或者或节点连接的谓词;步骤2 :将上述SQL语句转换为按二元表进行的查询,记为select L from(K1XK2X......)where Λ / V (A1,......An),其中,Ki 是查询相关的列;步骤3、初始的逻辑查询计划树生成;步骤4、为步骤3中产生的逻辑查询计划树进行同表连接顺序优化;步骤5、根据逻辑查询计划树中保存的连接信息为每个关系表登记连接关系集J ;步骤6、根据关系集J判断关系表的类型,与多个表存在连接关系的为事实表,其余的为维表;步骤7、单事实表连接顺序优化;步骤8、多事实表连接顺序优化。优选地,步骤3具体包括
步骤3. I、利用关系代数等价变换规则将作用于同列的一元谓词进行下推并合并;步骤3. 2、将同表的一元谓词结点集通过与节点或者或节点自底向上依次连接成一棵左深逻辑查询子树,为每个表形成单表查询子树;步骤3. 3、将步骤3. 2中产生的所有单表查询子树用JOIN结点自底向上依次连接成一棵完整的逻辑查询计划树,将不同表列之间的连接条件存储到相应JOIN结点中。优选的,步骤4对逻辑查询树中的每棵单表查询子树进行连接顺序优化,具体为将产生最小中间结果的结点置于单表查询子树的最左下端。优选的,步骤7具体为对于每个事实表与其关联的维表,将事实表的逻辑查询子树下推到查询树底层,根据连接选择性从优到劣依次连接与该事实表连接的各维表的逻辑查询子树,形成一棵左深逻辑查询子树。优选的,步骤8具体为将步骤7中产生的左深逻辑查询子树用JOIN结点连接成一棵紧密树,并根据维表重复情况将相关单事实表查询树中的相应连接条件转移到JOIN 结点中。本发明的优点是根据列存储数据组织的特点和分析型查询需求的特征,提供一种基于列存储模型的连接顺序查询优化方法,生成的查询计划能够尽可能减少数据抽取代价以及每一步连接时的中间结果,以获得效率更高的查询执行策略。


图I为单表查询子树示意图;图2为逻辑查询计划树示意图。
具体实施例方式为使本发明更明显易懂,兹以一优选实施例详细说明如下。本发明提供了一种基于列存储模型的查询优化方法,其步骤为步骤I、接收用户按关系表进行的SQL查询输入,记为select L from R1, , Rm
where Λ / V (A1,......An)。其中Ri为关系表,L是关系的属性集,A1,......, An是由与
节点或者或节点连接的谓词步骤2 :将上述SQL语句转换为按二元表进行的查询,记为select L
from(K1XK2X......) where Λ / V (A1,......An),其中,Ki 是查询相关的列。若 Ki 和 Kj
是同一关系表R的属性,则称其为同表列。步骤3、初始的逻辑计划树生成;I)利用关系代数等价变换规则将作用于同列的一元谓词进行下推并合并。2)将同表的一元谓词结点集通过与节点或者或节点自底向上依次连接成一棵左深逻辑查询子树,为每个表形成单表查询子树,如图I所示(图中一元谓词记为SEL0)。3)将上述步骤中产生的所有单表查询子树用JOIN结点自底向上依次连接成一棵完整的逻辑查询计划树,将不同表列之间的连接条件存储到相应JOIN结点中,如图2所示。步骤4、同表连接顺序优化为步骤3中产生的逻辑查询计划树中每棵单表查询子树进行AND连接顺序优化,其原则为将选择性最优的结点交换到单表查询子树最左结点的位置;若该结点涉及的列没有建立聚簇索引,则将其与右兄弟结点交换,然后从建有聚簇索引的列中选择具有最优选择性的结点,将其与当前最左结点交换。给定单表查询子树,具体如下I)为其每个选择结点计算选择率;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对应的单表查询子树下推到查询树底层,根据连接选择性从优到劣依次连接各维表的单表查询子树。具体方法如下I)按连接代价从小到大将J(R)-{R}中各维表进行排序,将所对应的单表查询子树依次存入队列(以下简记为list);2)初始化单事实表连接顺序优化后的左深查询树(以下简记为tree)=事实表R 所对应的单表查询子树;3)从list头部获取一棵单表查询子树,并与上一步中的tree分别作为右、左孩子结点,生成一棵新的子树,树的根为JOIN结点。4)重复执行步骤5),直至IistSS5)输出tree,即为单事实表连接顺序优化后的左深查询树。步骤8、多事实表连接顺序优化I)按照步骤7中处理单事实表的方法为每个单事实表进行连接顺序优化,得到集合sub_tree
;2)初始化连接顺序优化后的查询树(以下简记为seq_tree) = sub_tree[O];3)将seq_tree以及集合sub_tree的下一个元素分别作为左、右孩子结点,生成一棵子树,树的根为JOIN结点。4)重复执行步骤4),直至sub_tree中元素取完,输出seq_tree,即为连接顺序优化后的查询树。
权利要求
1.一种基于列存储模型的查询优化方法,其特征在于,步骤为步骤I、接收用户按关系表进行的SQL查询输入,记为select L from R1, , Rmwhere Λ / V (A1,......An)。其中Ri为关系表,L是关系的属性集,A1,......, An是由与节点或者或节点连接的谓词;步骤2 :将上述SQL语句转换为按二元表进行的查询,记为select Lfrom (K1XK2X......) where Λ/V (A1,......An),其中,Ki 是查询相关的列;步骤3、初始的逻辑查询计划树生成;步骤4、为步骤3中产生的逻辑查询计划树进行同表连接顺序优化;步骤5、根据逻辑查询计划树中保存的连接信息为每个关系表登记连接关系集J ;步骤6、根据关系集J判断关系表的类型,与多个表存在连接关系的为事实表,其余的为维表;步骤7、单事实表连接顺序优化;步骤8、多事实表连接顺序优化。
2.如权利要求I所述的一种基于列存储模型的查询优化方法,其特征在于步骤3具体包括步骤3. I、利用关系代数等价变换规则将作用于同列的一元谓词进行下推并合并;步骤3. 2、将同表的一元谓词结点集通过与节点或者或节点自底向上依次连接成一棵左深逻辑查询子树,为每个表形成单表查询子树;步骤3. 3、将步骤3. 2中产生的所有单表查询子树用JOIN结点自底向上依次连接成一棵完整的逻辑查询树,将不同表列之间的连接条件存储到相应JOIN结点中。
3.如权利要求I所述的一种基于列存储模型的查询优化方法,其特征在于步骤4对逻辑查询树中的每棵单表查询子树进行连接顺序优化,具体为将产生最小中间结果的结点置于单表查询子树的最左下端。
4.如权利要求I所述的一种基于列存储模型的查询优化方法,其特征在于步骤7具体为对于每个事实表与其关联的维表,将事实表的逻辑查询子树下推到查询树底层,根据连接选择性从优到劣依次连接与该事实表连接的各维表的逻辑查询子树,形成一棵左深逻辑查询子树。
5.如权利要求I所述的一种基于列存储模型的查询优化方法,其特征在于步骤8具体为将步骤7中产生的左深逻辑查询子树用JOIN结点连接成一棵紧密树。
全文摘要
本发明提供了一种基于列存储模型的查询优化方法,其特征在于,步骤为将用户输入的按关系表进行的查询;转换为按属性二元表进行的查询;初始的逻辑计划树生成;步为产生的逻辑查询计划树进行同表连接顺序优化;根据逻辑计划树中保存的连接信息为每个关系表登记连接关系集J;根据集合J判断关系表的类型,与多个表存在连接关系的为事实表,其余的为维表;单事实表连接顺序优化;多事实表连接顺序优化。本发明的优点是根据列存储数据组织的特点和分析型查询需求的特征,提供一种基于列存储模型的数据查询优化方法,尽可能减少数据抽取数量以及每一步连接时的中间结果,以获得效率更高的查询执行策略。
文档编号G06F17/30GK102609493SQ20121001995
公开日2012年7月25日 申请日期2012年1月20日 优先权日2012年1月20日
发明者乐嘉锦, 夏小玲, 王梅, 陆戌辰 申请人:东华大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1