执行具有多个集合操作符的查询的制作方法

文档序号:8435845阅读:367来源:国知局
执行具有多个集合操作符的查询的制作方法
【专利说明】
【背景技术】
[0001]关系数据库管理系统(RDBMS)在表中存储数据,其中,所述表是全部具有相同列的行的集合。表中的每列保持特定类型的数据用于组成行的数据。结构化查询语言(SQL)经常被用于查询、访问和操作包含在表中的数据。所述SQL语言包括集合操作符Un1n、Un1nAlKIntersect>Intersect All、Except 和 Except All。复杂的 SQL 查询使用集合操作符Un1n,Intersect 和 Except 的各种组合。
【附图说明】
[0002]通过示例的方式图示出本公开的特征并且不局限于下面的(一个或多个)图,其中,相同的附图标记指示相同的元件,其中:
图1示出了依据本公开的示例的计算环境的功能框图,其中,可实现本文中所公开的数据库管理器;
图2是依据本公开的示例的图1所示的机器的功能框图;
图3示出了依据本公开的示例的用于执行查询的方法的流程图;
图4A-4D分别描绘出依据本公开的示例的在图3所描绘的方法期间执行的各种操作的说明不例的图;
图5描绘出依据本公开的示例的用于生成谓词的方法的流程图;
图6示出了依据本公开的示例的可在其上实现图5所描绘的方法的集合操作符分析树的图;以及
图7图示出依据本公开的示例的计算设备的示意性表示,该计算设备可用于执行图1和2所描绘的机器的各种功能。
【具体实施方式】
[0003]出于简单和说明的目的,本公开主要参照其示例进行描述。在下列描述中,阐述了许多具体的细节以提供对本公开的透彻理解。然而,将显而易见的是,本公开可在不限于这些具体细节的情况下被实践。在其他实例中,一些方法和结构并未予以详细描述以免不必要地模糊本公开。
[0004]如遍及本公开所使用的,术语“包括”意指包括但不限于,术语“包含”意指包含但不限于。术语“基于”意指至少部分地基于。此外,术语“一个”旨在表示特定元件中的至少一个。
[0005]本文所公开的是用于执行具有多个集合操作符的查询的示例方法,其中,所述查询可包括集合操作符的混合。本文还公开的是用于实现示例方法的示例设备,以及在其上存储实现该示例方法的机器可读指令的示例非暂时性计算机可读介质。依据示例,用于执行查询的方法在Vertica?列存储数据库中被调用或实现。
[0006]本文所公开的用于执行查询的示例方法包括一组高效地消除针对集合操作符的重复的操作,而不需要在确定查询的输出时执行多个Group By操作。换言之,通过本文所公开的方法的实现,查询的结果可通过经由单一 Group By操作创建至多一个哈希表来确定,而不管查询中包括的集合操作符的数量或类型。举例来说,Group By操作对各组行操作并且对各组中的每一个返回一行,例如,以从结果表中消除重复行。集合操作符包括Un1n、Intersect 和 Except。
[0007]然而,本文所公开的示例方法在不需要对该方法显著改变的情况下也可被扩展为实现Intersect All和Except All。特别是,仅可改变该示例方法以包括每个元组被示出在输出中的次数的改变。通过特定的示例,在查询select * from TableA IntersectAll select * from TableB 时,谓词将与 Intersect 查询相同,即,count (A) >0 AND (与)count(B)>0。然而,满足以上条件的每个元组必须被输出min (count (a), count(B))次。所有剩下的操作将保持相同。在其中集合操作符为Ex^pt All的示例中,谓词将与Ex^pt的谓词相同,但是满足以上条件的每个元组必须被输出max (count (a)-count (B),0)次。
[0008]相比之下,用于执行包含一组集合操作符的查询的传统技术是执行Join操作,其每次仅接受两个输入。在这种传统技术中,对于η个不同的集合操作符,需要建立η-1个哈希表,当哈希表被建立在其中的存储器对于在给定时间要被存储的任何η-1个哈希表来说太小时,这或许是不可能的。如此,如果由于不足的存储器、哈希表必须被写入磁盘多次以保存任何哈希表,那么该查询可能执行不良。此外,这种传统技术取决于使用成本模型来选择内部和外部表。从而,如果成本模型错误地选择内部和外部表,那么所产生的Join操作可导致相对大的哈希表,这导致存储器资源的相对大的消耗。由这种传统技术所产生的相对大的哈希表还可以导致差的性能,例如,在Except操作符的情况下,因为如果Except,那么结果哈希表只可从右输入进行创建,如果右输入的大小与左输入相比非常大,那么该查询可能执行不良。这种传统技术的另一个可能的缺点是:为了消除重复输入,除在Join操作期间建立的哈希表之外,还需要建立另一个哈希表用于Group By操作。
[0009]另一种传统技术包括由Postgres实现的技术。在这种传统技术下,每个操作仅允许两个输入,并且因此涉及N个集合操作符的查询可能需要建立N-1个哈希表以确定输出。这种技术受集合操作符查询的优先级所约束。对于涉及多个集合操作符的查询,这种传统技术应用多个Group By操作,这可能是昂贵的。此外,这种传统技术在Intersect的情况下依赖于用于选择内部和外部表的成本模型,并且在Ex^pt的情况下总是选择左表。
[0010]因此,与传统的查询处理技术相比,本公开的各方面使查询的结果能够以相对高效的方式被确定,而不依赖于相对大的存储器。
[0011]首先参照图1,示出了依据示例的计算环境100的功能框图,其中,可实现在本文中所公开的数据库管理器。应该显而易见的是,图1所描绘的图表示一般化图示而且在不脱离本公开的范围的情况下,可增加其他组件或可去除、修改或重新排列现有的组件。
[0012]计算环境100被描绘为包括机器110、数据存储器120、网络130和多个客户端设备140a-140n,其中,“η”表示大于或等于I的整数。机器110 (其可包括计算机、服务器等)也被描绘为包括数据库管理器112、包含表116的数据库114和包含查询集合124的存储器122。数据库管理器112用以管理数据库114,例如,访问和修改包含在数据库114的表116中的数据,对包含在表116中的数据执行查询等。例如,数据库管理器112用以执行涉及 Un1n、Intersect、Except、Un1n AlKIntersect All 和 Except All 集合操作符的 SQL操作。还如图1所示,数据库管理器112包括Un1n All执行模块216和Group By执行模块218,它们可在执行SQL操作时执行各种功能,如下面详细论述的。此外,查询集合124(其可包括查询操作的例如中间结果集合、分组结果集合等)可存储在存储器122中,存储器122可包括随机存取存储器,诸如动态随机存取存储器(DRAM)。在这点上,查询集合124可存储在存储器122中而不是存储在磁盘(诸如数据存储器120)上。因此,从一方面来看,查询集合124可能不被写入磁盘多次,而是可在存储器122中存储并进行访问。对其中可实现数据库管理器112的各种方式在下面进行更详细地描述。
[0013]表116的实际数据可被存储在数据存储器120中,数据存储器120包括易失性和/或非易失性存储器,诸如,硬盘上的光学或磁性介质、DRAM、EEPROM、MRAM、相变RAM(PCRAM)、忆阻器、闪存等。附加表,例如由集合操作符(诸如,Un1n、Intersect、Except等)所产生的那些也可被存储在数据存储器120中。依据示例,数据库114包括¥虹^(^?列存储数据库。此外,虽然数据存储器120已被描绘为与机器110分离,但在不脱离本文所包含的公开的范围的情况下,数据存储器1
当前第1页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1