以多线程不同驱动源执行计划处理查询的方法和系统的制作方法

文档序号:6437828阅读:131来源:国知局
专利名称:以多线程不同驱动源执行计划处理查询的方法和系统的制作方法
技术领域
本发明的实施例总体上涉及计算机系统并且更具体地涉及使用执行计划处理查询的数据库管理系统。
背景技术
计算机系统通常包括计算机程序与硬件(诸如半导体、晶体管、芯片、电路板、存储设备和处理器)的组合。计算机程序存储于存储设备中并且由处理器执行。基本上,计算机系统用于存储、操纵和分析数据。一种用于管理数据的机制被称为数据库管理系统(DBMS)或者简称为数据库。已知许多不同类型的数据库,但是最常见的数据库常被称为关系数据库(RDB),该关系数据库以表的形式组织数据,这些表具有如下行和如下列、字段或者属性,这些行代表数据库中的各个条目、元组或者记录,这些列、字段或者属性限定什么存储于每个条目、元组或者记录中。每个表在数据库内具有唯一名称,并且每列在特定表内具有唯一名称。数据库还具有一个或者多个索引,这些索引是如下数据结构,这些数据结构向DBMS告知在给定编索引的列值时某行在表中的位置,这类似于向读者告知给定的字词出现于哪一页的书本索引。从数据库检索数据的最常见方式是通过可以源于用户接口、应用程序或者远程计算机系统(诸如客户端或者对等体)的语句(称为数据库查询)。查询是为了从数据库检索满足或者符合在查询中指定的标准或者条件的、由DBMS赋值的表达式。虽然查询要求作为响应而返回特定数据集,但是查询通常不指定查询执行方法。因此,在DBMS接收到查询之后,DBMS解释查询并且确定需要什么内部步骤来满足查询。这些内部步骤可以包括标识在查询中指定的一个或者多个表、在查询中选择的一行或者多行以及其它信息(诸如是否使用现有索引、是否构建临时索引、是否使用临时文件来执行排序和/或为了满足查询而将把表联接在一起的顺序)。这些内部步骤放在一起称为执行计划。DBMS经常保存执行计划并且在用户或者请求程序重复查询时(这经常出现)重用它,而不是经历重新创建执行计划这样的耗时过程。可以针对任一查询创建多个不同执行计划,每个执行计划将返回满足查询的相同数据集,而不同执行计划可以提供广泛的不同性能。因此,DBMS选择的执行计划需要在时间和硬件资源方面以合理成本提供所需数据。因此,DBMS经常创建多个前瞻执行计划,并且继而选择最佳、最快或者成本最少的执行计划来执行。一个影响特定执行计划的成本的因素是执行计划在执行时从数据库表返回的行数。一个影响所处理的行数的重要方面是表的联接顺序。响应于向多个表请求数据的查询,DBMS联接来自这些多个表的行(行经常被水平串联成结果集合),以便从所有表中发现和检索数据。因此,联接运算是查询(联接查询)所访问的两个表之间的关系,并且执行联接运算以连接(或者联接)来自两个或者更多表的数据,其中DBMS将具有特定属性的行联接在一起以形成DBMS向结果集合保存的新行。联接顺序通常由执行计划指定并且是如下顺序,当DBMS经由执行计划执行查询时DBMS 按照该顺序执行联接运算以从数据库表检索数据行并且将数据行联接成结果集合。
通常使用嵌套循环算法来实施联接运算,其中将按照联接顺序来自前两个表的所得新行与来自第三个表的所得行联接,并且联接这些结果与第四个表,等等。最终完成全部所需联接运算,并且向满足查询的结果集合中存储所得新行。由于单个联接限于访问两个表,所以按照特定顺序依次执行多表联接。可以通过按照若干可能联接顺序中的任何联接顺序实施多个不同联接查询。例如,涉及联接表A、B和C的查询可以执行为联接表A和B, 继而将表A与表B联接的结果和表C进行联接。或者,相同查询可以执行为联接表A和C, 继而将表A与表C联接的结果和表B进行联接。DBMS尝试选择如下联接顺序,该联接顺序在联接处理中及早从潜在结果集合中消除最大数目的行,这节省了与以后在联接运算中重复访问表相关联的成本。DBMS在尝试为查询确定最佳联接顺序时经常评估关于表A、B和C的某些特性。特别地,在运行时期间,一个联接运算可以具有高扇出(fan-out)速率,其中表A的每行匹配表B中的多行。如果先执行这一联接,则这些匹配行中的每个将需要与表C联接,从而需要大量中间运算。相反地,其它联接运算可能具有高扇入(fan-in)速率,其中表A的每行匹配表C中的很少行或者零行。如果先执行这一联接运算,则仅少数行需要与表B联接,从而节省多个中间运算。

发明内容
本公开提供了方法、计算机可读存储介质和计算机系统。在一个实施例中,指明由实施查询的第一执行计划指定的第一驱动程序源,并且指明由实施查询的第二执行计划指定的第二驱动程序源。执行第一执行计划的部分和第二执行计划的部分。如果通过执行第一执行计划的该部分而返回的第一行的唯一标识符不匹配通过执行第二执行计划的该部分而向结果集合保存的来自第二驱动程序源的所有行的所有唯一标识符,则向结果集合添加通过执行第一执行计划的该部分而返回的第一行,并且向唯一标识符日志添加通过执行第一执行计划的该部分而返回的第一行的唯一标识符。


图1描绘了用于实施本发明的实施例的示例系统的高级框图。图2描绘了根据本发明的实施例的示例数据库管理系统的框图。图3描绘了根据本发明的实施例的用于数据库的示例数据结构的框图。图4描绘了根据本发明的实施例的用于唯一标识符日志的示例数据结构的框图。图5描绘了根据本发明的实施例的用于如下执行计划的示例数据结构的框图,该执行计划使用第一联接顺序和第一驱动程序源实施查询。图6描绘了根据本发明的实施例的用于如下执行计划的另一示例数据结构的框图,该执行计划使用第二联接顺序和第二驱动程序源实施查询。图7描绘了根据本发明的实施例的用于执行用于查询的执行计划的示例处理的流程图。然而,应当注意,附图仅图示了本发明的示例实施例,并且因此并未被视为限制本发明其它实施例的范围。
具体实施例方式参照附图(其中相似标号在若干图中通篇表示相似部分),图1描绘了根据本发明的实施例的经由网络130连接到客户端计算机系统132的服务器计算机系统100的高级框图表示。在此仅为方便起见而使用术语“服务器”和“客户端”,并且在各种实施例中,在一个环境中作为客户端计算机进行操作的计算机系统在另一环境中可以作为服务器计算机进行操作,反之亦然。本发明的实施例的机制和装置同样适用于任何适当计算系统。计算机系统100的主要部件包括一个或者多个处理器101、主存储器102、终端接口 111、存储接口 112、1/0(输入/输出)设备接口 113和网络适配器114,所有这些部件经由存储器总线103、1/0总线104和I/O总线接口单元105直接或者间接通信地耦合以用于部件间通信。计算机系统100包含在此通称为处理器101的一个或者多个通用可编程中央处理器(CPU)101A、101B、101C和101D。在一个实施例中,计算机系统100包含通常为相对大型系统的多个处理器;然而,在另一实施例中,计算机系统100可以备选地是单个CPU系统。每个处理器101执行主存储器102中存储的指令并且可以包括一级或者多级板上高速缓存。在一个实施例中,主存储器102可以包括用于对数据和程序进行存储或者编码的随机存取半导体存储器、存储设备或者存储介质。在另一实施例中,主存储器102代表计算机系统100的整个虚拟存储器,并且也可以包括耦合到计算机系统100或者经由网络130 连接的其它计算机系统的虚拟存储器。主存储器102在概念上是单个单片实体,但是在其它实施例中,主存储器102是更复杂的布置,诸如高速缓存和其它存储器设备的层级。例如,存储器可以存在于多级高速缓存中,并且可以按照功能进一步划分这些高速缓存,从而使得一个高速缓存保持指令而另一个保持由一个或者多个处理器使用的非指令数据。如在各种所谓的非统一存储器访问(NUMA)计算机架构中的任何架构中已知的那样,存储器可以被进一步分布并且与不同CPU或者CPU集合相关联。主存储器102对DBMS 150、结果集合152、查询158、应用160和UID (唯一标识符) 日志162进行存储或者编码。虽然DBMS 150、结果集合152、查询158、应用160和UID日志162被图示为包含于计算机系统100中的存储器102内,但是在其它实施例中,它们中的一些或者全部可以在不同计算机系统上并且可以例如经由网络130来远程访问。计算机系统100可以使用如下虚拟寻址机制,这些虚拟寻址机制允许计算机系统100的程序表现为如同它们仅有权访问大型单个存储实体而不是访问多个较小的存储实体。因此,尽管DBMS 150、结果集合152、查询158、应用160和UID日志162被图示为包含于主存储器102内,但是这些单元并不必须全部完全同时包含于相同存储设备中。另外,虽然DBMS 150、结果集合152、查询158、应用160和UID日志162被图示为单独实体,但是在其它实施例中,它们中的一些、它们中的一些的部分或者它们全部可以被封装在一起。在一个实施例中,DBMS 150和/或应用160包括在处理器101上执行的指令或者语句或者由在处理器101上执行的指令或者语句解译的指令或者语句,这些指令或者语句实现如下文参照图2、图3、图4、图5、图6和图7进一步描述的功能。在另一实施例中,取代或者补充基于处理器的系统,经由半导体器件、芯片、逻辑门、电路、电路卡和/或其它物理硬件设备采用硬件实施DBMS 150和/或应用160。在一个实施例中,DBMS 150和/或应用160除了指令或者语句之外还包括数据。在各种实施例中,应用160是用户应用、第三方
6应用、操作系统或者它们的任何部分、多个应用或者组合。 存储器总线103提供用于在处理器101、主存储器102和I/O总线接口单元105之间传送数据的数据通信路径。I/O总线接口单元105还耦合到系统I/O总线104以用于传送去往和来自各种/I/O单元的数据。I/O总线接口单元105通过系统I/O总线104与也被称为I/O处理器(IOP)或者I/O适配器(IOA)的多个I/O接口单元111、112、113和114通I/O接口单元支持与多种存储和I/O设备的通信。例如,终端接口单元111支持附接可以包括用户输出设备(诸如视频显示设备、扬声器和/或电视机)以及用户输入设备 (诸如键盘、鼠标、键区、触板、跟踪球、按钮、光笔或者其它指示设备)的一个或者多个用户 I/O设备121。用户可以使用用户接口来操纵用户输入设备,以便向用户I/O设备121和计算机系统100提供输入数据和命令,并且可以经由用户输出设备接收输出数据。例如,可以经由用户I/O设备121呈现(诸如在显示设备上显示、经由扬声器播放或者经由打印机打印)用户接口。存储接口单元112支持附接一个或者多个盘驱动器或者直接存取存储设备 125(这些驱动器或者设备通常是旋转磁盘驱动存储设备,尽管它们备选地可以是其它存储设备(包括配置成在主机计算机看来表现为单个大型存储设备的盘驱动器阵列))。在另一实施例中,可以经由任何类型的辅助存储设备实施存储设备125。可以按照需要向存储设备 125存储和从存储设备125检索主存储器102的内容或者其任何部分。I/O设备接口 113 提供到各种其它输入/输出设备或者其它类型的设备中的任何设备(诸如打印机或者传真机)的接口。网络适配器114提供从计算机系统100到其它数字设备和计算机系统132的一个或者多个通信路径;这样的路径可以包括例如一个或者多个网络130。虽然在图1中将存储器总线103示出为在处理器101、主存储器102和I/O总线接口 105之间提供直接通信路径的相对简单的单总线架构,但是存储器总线103实际上可以包括可以按照各种形式中的任何形式(诸如分层的点到点链路、星型或者网状配置、多层总线、并行和冗余路径或者任何其它适当类型的配置)布置的多个不同总线或者通信路径。另外,尽管将I/O总线接口 105和I/O总线104示出为单个相应的单元,但是计算机系统100实际上可以包含多个I/O总线接口单元105和/或多个I/O总线104。尽管示出了将系统I/O总线104与伸向各种I/O设备的各种通信路径分离的多个I/O接口单元,但是在其它实施例中,一些或者所有I/O设备直接连接到一个或者多个系统I/O总线。在各种实施例中,计算机系统100是几乎不具有或者完全没有直接用户接口、但是从其它计算机系统(客户端)接收请求的多用户主机计算机系统、单用户系统或者服务器计算机或者类似设备。在其它实施例中,计算机系统100被实施为台式计算机、便携计算机、膝上型或者笔记本计算机、平板计算机、口袋式计算机、电话、智能电话、寻呼机、汽车、 电话会议系统、电器或者任何其它适当类型的电子设备。网络130可以是任何适合的网络或者网络的组合,并且可以支持适合于向/从计算机系统100和计算机系统132传达数据和/或代码的任何适当协议。在各种实施例中, 网络130可以代表直接或者间接连接到计算机系统100的存储设备或者存储设备组合。在另一实施例中,网络130可以支持无线通信。在另一实施例中,网络130可以支持硬接线通信,诸如电话线或者线缆。在另一实施例中,网络130可以是因特网并且可以支持IP(网际协议)。在另一实施例中,网络130被实施为局域网(LAN)或者广域网(WAN)。在另一实施例中,网络130被实施为热点服务提供商网络。在另一实施例中,网络130被实施为内部网。在另一实施例中,网络130被实施为任何适当蜂窝数据网络、基于小区的无线电网络技术或者无线网络。在另一实施例中,网络130被实施为任何适合的网络或者网络的组合。虽然示出了一个网络130,但是在其它实施例中可以存在任何数目的网络(类型相同或者不同)。计算机系统132可以包括计算机系统100的一些或者所有硬件和/或计算机程序单元。图1旨在于描绘计算机系统100、网络130和计算机系统132的有代表性的主要部件。但是,个别部件可以具有比图1中所代表的复杂性更大的复杂性,可以存在不同于或者补充图1中所示部件的部件,并且这样的部件的数目、类型和配置可以变化。在此公开了这样的附加复杂性或者附加变换的若干具体示例;这些仅为举例而并不一定仅有这样的变换。可以采用多种方式(包括使用各种计算机应用、例程、部件、程序、对象、模块、数据结构等)实施图1中所示的并且实施本发明的各种实施例的各种程序部件,并且下文将这些程序部件称为“计算机程序”或者简称为“程序”。计算机程序包括一个或者多个如下指令或者语句,这些指令或者语句在各种时间驻留于计算机系统100中的各种存储器和存储设备中,并且在由计算机系统100中的一个或者多个处理器读取和执行时或者在由一个或者多个处理器所执行的指令解译时,使得计算机系统100执行为了执行包括本发明的实施例各种方面的步骤或者单元而必需的动作。 本发明的实施例的方面可以具体化为系统、方法或者计算机程序产品。因而,本发明的实施例的方面可以采用全硬件实施例、全程序实施例(包括存储于存储设备中的固件、驻留程序、微代码等)或者将程序与硬件方面组合的实施例这样的形式(在此都可以通称为“电路”、“模块”或者“系统”)。另外,本发明的实施例可以采用在一个或者多个如下计算机可读介质中具体化的计算机程序产品的形式,这些计算机可读介质具有具体化于其上的计算机可读程序代码。可以利用一个或者多个计算机可读介质的任何组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质可以例如是但不限于电子、磁、光学、电磁、红外线或者半导体系统、装置或者设备或者前述介质的任何适合的组合。计算机可读存储介质的更多具体示例(非穷举列表)可以包括具有一个或者多个接线的电连接、便携式计算机磁盘、硬盘(例如存储设备125)、随机存取存储器(RAM)(例如存储器10 、只读存储器(ROM)、可擦除可编程只读存储器(EPROM)或者闪存、光纤、便携式紧致盘只读存储器(CD-ROM)、光学存储设备、磁存储设备或者前述介质的任何适合的组合。 在本文档的上下文中,计算机可读存储介质可以是任何如下有形介质,该有形介质可以包含或者存储用于由指令执行系统、装置或者设备使用,或者与指令执行系统、装置或者设备结合使用的程序。计算机可读信号介质可以包括例如在基带中或者作为载波的一部分的具有具体化于其上的计算机可读程序代码的传播数据信号。这样的传播信号可以采用多种形式中的任何形式(包括但不限于电磁、光学或者其任何适合的组合)。计算机可读信号介质可以是任何如下计算机可读介质,该计算机可读介质不是计算机可读存储介质,而是传达、传播或者传送用于由指令执行系统、装置或者设备使用,或者与指令执行系统、装置或者设备结合使用的程序。可以使用任何适当介质(包括但不限于无线、有线线路、光纤线缆、射频(RF) 或者前述介质的任何适合的组合)来发送在计算机可读介质上具体化的程序代码。可以使用一种或者多种编程语言(包括面向对象的编程语言和常规过程编程语言)的任何组合来编写用于实现用于本发明的实施例的方面的操作的计算机程序代码。程序代码可以完全在用户的计算机上、部分在远程计算机上或者完全在远程计算机或者服务器上执行。在后一种场景中,远程计算机可以通过任何类型的网络(包括局域网(LAN)或者广域网(WAN))连接到用户的计算机,或者可以产生与外部计算机的连接(例如通过使用因特网服务提供商的因特网)。下文参照方法、装置(系统)和计算机程序产品的流程示和/或框图描述本发明的实施例的方面。流程示和/或框图的每个块,以及在流程示和/或框图中的块的组合,可以由在计算机可读介质中具体化的计算机程序指令实施。可以向通用计算机、专用计算机或者其它可编程数据处理装置的处理器提供这些计算机程序指令以产生机器,从而使得经由计算机或者其它可编程数据处理装置的处理器执行的指令产生用于实施流程图和/或框图的一个或者多个块所指定的功能/动作的装置。这些计算机程序指令也可以存储于如下计算机可读介质中,该计算机可读介质可以指引计算机、其它可编程数据处理装置或者其它设备以特定方式工作,从而使得存储于计算机可读介质中的指令产生包括如下指令的制造产品,这些指令实施由流程图和/或框图的一个或者多个块所指定的功能/动作。可以经由可以操作地或者通信地连接(直接或者间接)到一个或者多个处理器的多种有形计算机可读存储介质,向计算机系统递送限定了本发明的各种实施例的功能的计算机程序。计算机程序指令也可以加载到计算机、其它可编程数据处理装置或者其它设备, 以使得一系列操作步骤在计算机、其它可编程装置或者其它设备上执行,以产生计算机实施的过程,从而使得在计算机或者其它可编程装置上执行的指令提供用于实施在流程图和 /或框图的一个或者多个块中指定的功能/动作的过程。图中的流程图和框示了根据本发明的各种实施例的系统、方法和计算机程序产品的可能实施方式的架构、功能和操作。在此方面,在流程图或者框图中的每个块可以代表如下代码模块、段或者部分,该代码模块、段或者部分包括用于实施一个或者多个指定逻辑功能的一个或者多个可执行指令。在一些实施例中,在块中指出的功能可以不按照图中指出的顺序出现。例如,根据所涉及的功能,被连续示出的两个块实际上可以基本上并行执行,或者有时可以被逆序执行。框图和/或流程示的每个块,以及在框图和/或流程示中的块的组合,可以在专用硬件与计算机指令的组合中,由执行指定功能或者动作的基于专用硬件的系统实施。本发明的实施例也可以被实现为与客户公司、非盈利组织、政府实体或者内部组织结构的服务约定的一部分。这些实施例的方面可以包括配置计算机系统以执行并且部署如下计算服务(例如计算机可读代码、硬件和web服务),这些计算服务实施一些或者所有在此描述的方法。这些实施例的方面也可以包括分析客户公司、响应于分析来产生推荐、生成用于实施推荐的部分的计算机可读代码、向现有过程、计算机系统和计算机基础结构中集成计算机可读代码、计量对在此描述的方法和系统的使用、向用户分配开支以及针对用户对这些方法和系统的使用向用户记账。此外,可以基于在本发明的具体实施例中实施下文描述的各种程序的应用来标识这些程序。但是,仅为方便起见而使用以下任何特定程序术语,因此本发明的实施例并不限于仅使用于这样的术语所标识和/或暗示的任何具体应用。图1中所示的示例性环境并非意在限制本发明。实际上,可以使用其它备选硬件和/ 或程序环境而不脱离本发明的实施例的范围。图2描绘了根据本发明的实施例的示例DBMS 150的框图。DBMS 150包括UID日志162、解析器205、优化器215、执行引擎230和数据库220。数据库220包括表235和一个或者多个索引对0。表235以如下行和如下列、字段或者属性的形式组织数据,这些行代表各个条目、元组或者记录,这些列、字段或者属性限定什么内容存储于每个行、条目、元组或者记录中。每个表235在数据库220内具有唯一名称,并且每列在特定表235内具有唯一名称。索引240为如下数据结构,这些数据结构向DBMS 150告知在编索引的列值给定时某行在表235中的位置。DBMS 150中的解析器205从应用160接收查询158。解析器158请求DBMS 150搜索或者发现数据行或者行组合,并且将那些发现的行中符合或者满足查询158所指定的标准、关键字和/或值的数据存储到结果集合152中。在一个实施例中,应用160向DBMS 150 多次发送相同查询158,根据DBMS 150中的数据在查询158的出现之间是否已经改变这可能会产生或者可能不产生不同的结果集合152。解析器205根据查询158生成解析的语句 210,解析器205向优化器215发送该语句210。优化器215对解析的语句210执行查询优化。作为查询优化的结果,优化器215使用在数据库220中存储的诸如平台能力、查询内容信息等数据来生成一个或者多个执行计划225。一旦生成,优化器215就向执行引擎230发送执行计划225,该执行引擎使用执行计划225、索引240和UID日志162来执行查询158, 以便发现和检索数据库220中的数据库表235中的满足查询158的标准的数据。执行引擎 230将满足查询158所指定的标准的结果数据存储到结果集合152中,结果集合152作为对查询158的响应而返回给应用160。在一个实施例中,DBMS 150向执行计划225中存储各种阈值。DBMS 150可以从应用160、从用户或者从数据库管理员接收各种阈值,或者阈值可以由优化器215的设计者设置。图3描绘了根据本发明的实施例的用于数据库220的示例数据结构的框图。示例数据库220包括示例表χ 235-1、示例表y 235-2和示例表ζ 235-3。表χ 235-1包括列 χ. cl 310。表 y 2;35-2 包括列 y. cl 315 和列 y. c2 320。表 ζ 2;35_3 包括列 ζ. c2 325 和列 ζ. c3 330。列310和列315共享相同列名称或者标识符“cl”,而列320和列325共享相同列名称或者标识符“c2”。因此,在此使用符号表示χ. cl (指表X235-1中的列310)、y. cl (指表y 235-2中的列315)、y. c2 (指表y235_2中的列320),ζ. c2 (指表235-3中的列325)和 z. c3(指表235-3中的列330)来唯一地标识列。将示例数据库220中的每个表划分成行和列。例如,表χ 235-1包括具有存储于列x.cl 310中的“11”的第一行(11);具有存储于列χ. cl 310中的“ 12”的第二行(12); 具有存储于列χ. cl 310中的“3”的第三行(3)等等。表χ 235-1图示了标识标中的相应行的行标识符(“行1”、“行2”、“行3”等)。在另一实施例中,行标识符是标识相应行的存储位置的地址(绝对、相对、物理、逻辑或者虚拟地址)。在一个实施例中,索引240中的地址或者标识符指向行标识符。在另一实施例中,行标识符在列中是唯一值。行标识符对于
10所有表和行而言都存在。作为另一示例,表Y 235-2包括具有存储于列y. Cl 315中的“ 11 ”和存储于列 y. c2 320中的“C”的第一行(11,C);具有存储于列y. cl 315中的“11”和存储于列y. c2 320中的“Α”的第二行(ILA);具有存储于列y. cl 315中的“11”和存储于列y. c2 320中的“A”的第三行(ILA)等等。作为另一示例,表ζ 235-3包括具有存储于列z. c2 325中的“C”和存储于列z. c3 330中的“2009”的第一行(C, 2009);具有存储于列z. c2 325中的“Α”和存储于列z. c3 330 中的“2010”的第二行(A,2010);具有存储于列ζ. c2 325中的“Α”和存储于列ζ. c3 330中的“2010”的第三行(A,2010)等等。图4描绘了根据本发明的实施例的用于唯一标识符日志162的示例数据结构的框图。在一个实施例中,UID日志162包括如下唯一标识符,这些唯一标识符唯一地标识数据库220中的来自驱动程序源的如下行,这些行在结果集合152中并且满足查询158。在一个实施例中,UID日志162还包括数据库220中的来自驱动程序源的如下行的唯一标识符,这些行已被执行计划225的执行处理,但是由于这些行不满足查询158而尚未向结果集合152 添加。已处理意味着DBMS 150已经读取这些行、比较读取的行与查询158的标准,并且确定这些行不满足查询158的标准。在各种实施例中,唯一标识符包括行标识符、列标识符、 行在列中的唯一值和/或表标识符,或者它们的任何组合或者多个标识符。驱动程序源是按照执行计划225的联接顺序的一个指明表。在一个实施例中,DBMS 150指明驱动程序源为按照执行计划225的联接顺序的第一个表,并且实施相同查询158的每个执行计划225 可以具有不同联接顺序和不同的指明驱动程序源。在另一实施例中,实施相同查询158的每个执行计划225不同、但是具有相同联接顺序。不同、但是具有相同联接顺序的执行计划的示例是如下执行计划,这些执行计划指定按照不同方式访问相同表,诸如在一个执行计划中扫描表的索引并且使用索引值来随机访问该表,而在另一执行计划中扫描表(以行为序从开头到末尾)而不使用索引。另一示例是具有不同并行程度的执行计划,诸如一个执行计划指定使用一个任务来执行该执行计划,而另一执行计划指定使用并行执行的两个任务。图4中所示示例数据图示了 UID日志162包括如下行的标识符,这些行来自被不同执行计划标识为驱动程序源的不同表。因此,在一个实施例中,所有执行计划225的执行读取并且向相同UID日志162写入唯一标识符。在另一实施例中,每个执行计划225的执行向它自己的UID日志存储唯一标识符并且从所有其它执行计划225的所有UID日志读取唯一标识符。在一个实施例中,执行计划225的执行直至DBMS 150决定开始另一个执行另一执行计划的线程才向UID日志162添加UID。一旦DBMS 150已经决定开始另一线程,各种实施例就包括重新扫描驱动程序源、比较驱动程序源中的唯一标识符与在结果集合152中的返回行的UID并且向UID日志162添加满足查询158的唯一标识符;或者重新开始执行原执行计划、继而向UID日志162存储唯一标识符。图5描绘了根据本发明的实施例的示例执行计划225-1的框图,该示例执行计划 225-1使用第一联接顺序和第一驱动程序源实施查询。执行计划225-1是执行计划225 (图 1)的示例并且被通称为执行计划225。执行计划225-1包括代表如下联接运算的树形图,这些联接运算在执行时实施查询158。执行计划225-1的树形图包括联接节点510和515 ; 表节点 520,525 和 530 ;谓词 550,555 和 560 ;链接 574、576、578 和 580 ;以及链接 592,594 和596。表节点520代表表χ 235-1。表节点525代表表y 235-2。表节点530代表表ζ 235-3。执行计划225-1还包括驱动程序源标识符599,该驱动程序源标识符599标识表节点520所代表的表为驱动程序源。在其它实施例中,驱动程序源标识符599为可选的或者未被使用。例如,DBMS 150可以使用按照联接顺序的第一表节点所代表的表作为驱动程序源。作为另一示例,DBMS 150可以向谓词560添加如下子句,该子句表明为了满足谓词560, 来自按照联接顺序的第一个表的行的URI必须尚未存在于UID日志162中,这使得执行计划225的执行不向结果集合152保存另一执行计划的执行已经向结果集合152保存的行。树形图由于在性质上与具有树枝和树叶的层级结构的树相似而得名。例如,树叶连接到小树枝,小树枝进一步连接到大树枝,并且树的所有树枝在树根处具有共同起点。类似地,在执行计划225-1的树形图中的节点510、515、520、525和530具有层级结构,因为联接节点510与另一联接节点515具有关系,联接节点515本身可以与另一节点具有又一关系,以此类推。因此,节点可以被划分成最终都与根或者头节点510具有关系的组和子组。 为了更正式地限定树,树数据结构限定节点的层级结构。因此,树是一个或者多个节点的有限集合T,从而使得a) —个具体指明节点被称为整个树的根;并且b)其余节点(除了根之外)被分割成m > = 0个不相交集合1\、. . . Tffl,并且这些集合中的每个集合又为树。树 Tl、... Tm被称为根的子树。因此,树中的每个节点是包含于整个树中的一些子树的根。节点的子树数目被称为该节点的度。度为零的节点被称为端计算节点或者叶。非端节点被称为分支节点。通过假设根节点具有级别0来定义节点相对于T的级别,并且其它节点具有比它们相对于包含它们的子树具有的级别高一级的级别。每个根是它的子树的根的父代, 后者为同胞代,并且它们也是它们的父代的子代。每个根是根的所有子树中的所有节点的祖代。根节点的子树中的节点是根的后代。整个树的根节点无父节点。具有父节点和子节点的树形图仅为查询执行的如下逻辑表示,该逻辑表示有助于理解执行引擎230如何执行特定查询158。但是,优化器215生成的执行计划225可以包括执行引擎230可理解和可执行的代码。这种代码无需父节点和子节点、但是代之以包括具有这样的节点和连接的树形图模型所代表的逻辑并且也可以被实施为其它类型的数据结构。因而,尽管在此使用这样的树形图术语来描述本发明的实施例,但是无需实际创建和修改树形图。使用图5的执行计划225-1的示例树,根节点为节点510。根节点510为它的子节点515和530的父代。节点515为它的子节点520和525的父代。节点520、525和530无子代,因而它们为叶节点。节点520的祖代为节点515和510。节点525的祖代为节点515 和510。节点530的祖代为节点510。根节点510无祖代。链接574、576、578和580各自连接到、指向或者包含两个相邻节点的地址,并且允许DBMS 150发现父节点的子节点以及发现子节点的父节点。链接592、594和596各自连接到、指向或者包含谓词的地址,并且允许DBMS 150发现节点的谓词。在这一示例中,示例执行计划225-1实施的示例查询158可以被表达为“从X、y、ζ选择,其中χ. cl = y.cl并且y. c2 = ζ. c2并且ζ. c3 =年(当前日期)-1年”。执行计划225-1的树形示了用于示例性查询158的一个示例实现方式和一个示例联接顺序,但是用于这一查询158的其它实现方式和联接顺序也存在(包括不使用树和不使用图形的实施例)。每个谓词550,555和560连接到相应节点530,510和515。谓词550,555和560 各自代表查询158的部分并且包括如下相应条件标准表达式,DBMS 150通过将来自从表节点(这些表节点连接到谓词或者是连接到谓词的联接节点的子节点)检索的行的数据代入表达式中的与行中的列标识符匹配的变量来将这些条件标准表达式赋值为真或者假。在各种实施例中,谓词指定以下各项中的任何多项和/或者组合数据;列、字段或者关键字;函数、调用(call)、引用(invocation)、方法、类或者小程序;关系运算符(例如大于、小于、 等于、不等于、大于等于、小于等于或者任何其它关系运算符);逻辑运算符(例如AND、OR、 M)R、N0T、N0R、NAND或者任何其它逻辑运算符);算术运算符(例如乘法、除法、加法、减法、 基数、幂、对数或者任何其它算术运算符);以及寄存器运算(例如左移、右移运算或者任何其它寄存器运算);并且关系运算符、逻辑运算符、算术运算符和寄存器运算可以具有任何数目的自变量或者运算数(例如它们可以是一进制、二进制、三进制或者η进制)。DBMS 150读取联接节点,并且作为响应从联接节点的一个或者多个子表节点读取行、代入读取的行中的来自列(这些列具有与在连接到联接节点的谓词中指定的表和列标识符相同的表和列标识符)的数据,并且将所得谓词表达式赋值为真或者假。如果谓词表达式赋值为真,则读取的行满足或者符合连接的谓词,因而如果来自驱动程序源的行的唯一标识符尚未在UID日志162中,则DBMS 150向结果集合152保存读取的行。如果来自驱动程序源的唯一标识符已经在UID日志162中,则DBMS 150不向结果集合152添加行。如果谓词表达式赋值为假,则读取的行不满足或者符合谓词,因而DBMS 150从结果集合152 排除读取的行。联接节点代表如下表的联接运算,这些表的行满足连接的谓词。在各种实施例中, 联接运算可以包括内联接、相等联接、自然联接、外联接、左外联接、右外联接、全外联接、例外联接和自连接。在两个表之间的内联接造成在结果集合152中仅返回与某些选择标准匹配的行。外联接(诸如表A和表B的(根据一组选择标准的)左联接)返回所有匹配行以及表A中的在表B中无匹配的那些行。匹配行让它们的所有字段的值由来自表A和表B的数据填充。但是,来自表A的非匹配行将在来自表B的字段中具有空值或者其它默认字符。 另一外联接(诸如表A和表B的右联接)也返回所有匹配行,但是与左联接不同,其返回表 B中的在表A中无匹配的那些行。表A和表B的例外联接返回表A中的在表B中不存在匹配行的那些行的结果集合152。联接节点515代表使用连接的谓词560对子表节点520和525代表的表的联接运算。联接节点510代表如下联接运算,该联接运算使用对联接节点515的联接运算所返回的中间结果集合和子表节点530使用谓词550来创建的另一中间结果的谓词555。在一个实施例中,联接节点代表DBMS 150中的如下逻辑,该逻辑执行如下联接运算,该联接运算发现子表节点中的如下行,这些行的列值在联接节点的逻辑将发现的行的列值带入如下谓词中的占位符或者变量时满足谓词的标准,这些谓词具有与行中的列标识符相同的名称或者标识符。在操作中,DBMS 150使用执行计划225-1来执行查询158如下。DBMS 150在根或者头节点开始遍历节点并且遇见(读取)头联接节点510。由于联接节点510并非表节点,所以DBMS 150在搜索第一行时经由链接574向联接节点510的左子联接节点515行进。DBMS 150继而遇见(读取)联接节点515。由于联接节点515并非表节点,所以DBMS 150 在搜索第一行时再次经由链接578向节点515的左子节点520行进。DBMS 150继而遇见表节点520并且使用扫描操作从表节点520代表的表检索第一行。在扫描操作中,DBMS 150 从表的开头到末尾读取行而不使用索引240来随机访问表。DBMS 150继而向节点515的右子节点525行进,遇见(读取)表节点525,并且在表节点225标识的表中搜索满足联接节点515的连接谓词560的选择标准的第二行。如果 DBMS 150在表节点525标识的表中未发现满足联接节点515的连接谓词560的选择标准的第二行,则DBMS 150返回到表节点520并且在表χ中扫描下一行而且返回到表节点525 并且再次在表节点525标识的表y中搜索满足联接节点515的谓词560的选择标准的第二行。一旦标识了在表节点525标识的表中的如下匹配行(该匹配行满足谓词560的选择标准),DBMS 150就在中间结果集合中向联接节点510返回发现的第一行(在扫描操作中从节点520表示的表读取)和第二行(从表节点525读取)。DBMS 150继而向右子表节点530行进并且在表节点530标识的表ζ中搜索满足或者符合谓词550和555的第三行。 注意,在确定表Z中的行是否满足谓词555时,DBMS 150使用在表节点525中发现的并且在中间结果集合中返回的第二行,以便比较y.c2 = z.c2。如果DBMS 150针对从联接节点 515返回的中间结果集合在表530中未发现满足谓词550和555的行,则DBMS 150在返回到联接节点510并且再次在表ζ (表节点530)中搜索满足谓词550和555的第三行之前,返回到联接节点515并且重新执行联接,从而检索表x(表节点520)的下一行并且在表y(表节点525)中发现满足谓词560的行。一旦DBMS 150已经在表ζ (表节点530)中发现满足谓词550和555的标准的第三行,DBMS 150就向联接节点510返回满足谓词550、555和560的标准的来自表χ的第一行、来自表y的第二行和来自表ζ的第三行的中间结果集合。如前文参照图4描述的那样, DBMS 150继而向结果集合152添加满足谓词的行并且添加标识来自驱动程序源的行的唯一标识符。一旦DBMS 150在联接节点510扫描了表ζ中的所有行并且处理了任何匹配,DBMS 150就检索表χ的下一行并且重复前述操作序列。因此,代表表χ 235-1的表节点520是按照执行计划225-1的联接顺序的第一个表,因为DBMS 150在按照联接顺序从任何其它表(由节点525和530代表)读取行之前扫描来自表χ 235-1的行。DBMS 150指明表节点520所代表的表χ 235-1为用于执行计划225-1的驱动程序源,因为表节点520在联接顺序中是第一个。在另一实施例中,DBMS 150指明任何适当表为驱动程序源。节点525代表的表y 235-2在联接顺序中是第二个,因为DBMS 150在从表χ读取行以便确定是否满足谓词560之后并且在从表节点530代表的表ζ 235-3读取行之前从表y 235-2读取行。表节点530代表的表ζ 235-3在联接顺序中是第三个或者最后一个,因为DBMS 150在从表χ 235-1和表y 235-2读取行以便确定是否满足谓词550和555之后从表ζ 235-3读取行。图6描绘了根据本发明的实施例的另一示例执行计划225-2的框图,该执行计划使用第二联接顺序和第二驱动程序源来实施查询158。在这一示例中,执行计划225-2实施的查询158与执行计划225-1 (图幻实施的查询158相同,但是执行计划225-2具有与执行计划225-1不同的联接顺序和不同的驱动程序源。
执行计划225-2是执行计划225 (图1)的示例。执行计划225_2包括代表如下联接运算的树形图,这些联接运算在执行时实施查询158。执行计划225-2的树形图包括联接节点 610 和 615 ;表节点 620,625 和 630 ;谓词 650,655 和 660 ;链接 674、676、678 和 680 ; 以及链接692、694和696。表节点620代表表ζ 235-3。表节点625代表表y 235-2。表节点630代表表χ 235-1。执行计划225-2还包括驱动程序源标识符699,驱动程序源标识符 699将表节点620所代表的表标识为驱动程序源。在其它实施例中,驱动程序源标识符699 为可选的或者未被使用。在执行计划225-2中,表节点620在联接顺序中是第一个,表节点 625在联接顺序中是第二个,而表节点630在联接顺序中是第三个和最后一个。分别使用图2中所示数据库220中的示例数据和示例执行计划225-1,DBMS 150 向结果集合152返回如下行,该行包括来自表χ 235-1、表y 235-2和表ζ 235-3中的每个表的“行1”。由于执行计划225-1中的驱动程序源是表节点520,所以DBMS 150向UID日志162存储表χ的行1的指示。DBMS 150继而从表ζ 235-3读取“行6”、但是丢弃这一行并且不向结果集合152添加它,因为虽然满足谓词555(表y 235-2的“行1”中的y. c2 BP"C ”等于表ζ 253-3的“行6”中的z. c2即“C”),但是如果当年为2010年则z. c3即“2010” 不满足谓词550。DBMS 150继而读取并且最终丢弃表y 235-3的“行2”,因为在表ζ 235-3 中的“行2” (该行在列z. c2 325中包含与y. c2 320中的值“Α”匹配的值“Α”从而满足谓词555)包含z. c3 330即“2010”中的值“2010”,这不满足谓词550。DBMS 150继而读取并且出于相同原因而最终丢弃表y 235-2的“行3”和“行4”。这种读取满足按照联接顺序的较早的谓词的行、但是由于不满足按照联接顺序的较晚的谓词而最终丢弃行称为饥饿联接(starvation join)。在这一示例中,DBMS 150检测饥饿联接的出现,并且作为响应而创建具有不同联接顺序和不同驱动程序源的另一执行计划225-2,并且与执行计划225-1的执行并行开始执行计划225-2的执行。执行计划225-2 的执行发现执行计划225-1先前发现的满足谓词650、655和660的来自每个表的相同“行 1”,但是执行计划225-2的执行由于已经在UID日志162中标识了表χ的“行1”而丢弃来自每个表的“行1”并且不向结果集合152添加它们。执行计划225-2的执行继而继续扫描表ζ 235-3(由按照联接顺序的第一个表节点的表节点620标识)并且丢弃不符合谓词650 的“行2”、“行3”和“行4”。执行计划225-2的执行继而继续扫描表ζ 235-3并且发现满足谓词650的“行5”。执行计划225-2的执行继而在表y 235-2中发现满足谓词660的“行 6”(表y 235-2的y. c2 320中的“B”匹配表ζ 235-3的行5的z. c2 325中的“B”),以及在表χ 235-1中满足谓词655的“行3”(表y 235-2中的y.cl 315的“行6”中的“3”匹配表χ 2;35-1中的x.cl 310的“行3”中的“3”)。由于表ζ 2;35_3中的“行5”的UID未存在于UID日志162中,所以执行计划225-2的执行向UID日志162添加表ζ 235-3中的 “行5”的UID并且向结果集合152添加返回的行。因此,在一个实施例中,DBMS 150可以检测饥饿联接并且开始另一执行计划(在这一示例中为执行计划225- 的执行,该执行计划可以比原执行计划(在这一示例中为执行计划225-1)更快完成查询158而又仍然使用原执行计划(执行计划225-1)的返回行。图7描绘了根据本发明的实施例的用于执行用于查询的执行计划的示例处理的流程图。图7代表的逻辑是重新进入并且可以在相同或者不同处理器上由多个线程并行执行、基本上并行执行或者交织,从而经由多线程、多任务、多编程或者多处理技术创建并且执行不同执行计划。在另一实施例中,可以依次执行不同执行计划。控制在块700处开始。 控制继而继续块705,其中DBMS 150创建实施查询158的执行计划(诸如执行计划225-1 或者225- 。DBMS 150选择和指明执行计划中的驱动程序源。控制继而继续块710,其中DBMS 150执行该执行计划的当前部分从而返回行。如果行的UID已经存在于UID日志162中,则DBMS 150不向结果集合152添加那些行并且不向UID日志162添加UID。如果行的UID尚未存在于UID日志162中,则DBMS 150向结果集合152添加尚未存在的行、向UID日志162添加尚未存在于UID日志162中的驱动程序源行的UID,并且向请求查询158的用户或者应用返回结果集合152、保存结果集合152和 /或经由用户I/O设备121显示结果集合152。控制继而继续块715,其中DBMS 150确定实施查询158的任何执行计划(无论是由当前线程还是任何其它线程执行)的执行是否完成。如果在块715处的确定为真,则实施查询158的任何执行计划的执行完成,并且已经发现满足查询158的所有行,因而控制继续块799,其中图7的当前线程结束或者返回到调用程序。如果在块715处的确定为假,则实施查询158的任何执行计划的执行未完成,并且尚未发现满足查询158的所有行,因而控制继续块725,其中DBMS 150确定由执行计划的执行向结果集合152添加行的速率是否大于比由次快执行计划的执行向结果集合152添加行的速率更慢的阈值。如果在块725处的确定为真,则执行计划的执行向结果集合152添加行的速率大于比次快执行计划的执行向结果集合152添加行的速率更慢的阈值,因而控制继续块799, 其中图7的逻辑返回,这意味着当前线程停止执行当前执行计划,但是实施相同查询的其它执行计划继续执行而不受影响。如果在块725处的确定为假,则执行计划的执行向结果集合152添加行的速率未大于比次快执行计划的执行向结果集合152添加行的速率更慢的阈值,因而控制继续块 730,其中DBMS 150确定第一个表和第二个表的相继联接(按照联接顺序相继而无居间联接)从结果集合消除的行的比例是否大于饥饿阈值。联接运算通过从结果集合152去除或者删除不满足如下谓词的行来消除行,该谓词连接到代表联接运算的联接节点。如果比例大于饥饿阈值,则DBMS已经标识饥饿联接条件,其中来自按照联接顺序较晚的表(按照相继联接的联接顺序比第一个表更晚的第二个表)的行的联接从结果集合中消除大量行。如果在块730处的确定为真,则第一个表和第二个表的相继联接从结果集合消除的行的比例大于饥饿阈值,因而控制继续块735,其中DBMS 150创建执行图7的逻辑的另一线程并且开始另一线程在处理器上执行。新创建的线程创建并且执行具有与图7的当前实例执行的执行计划不同的联接顺序。在另一实施例中,新创建的线程创建并且执行具有与图7的当前实例执行的执行计划相同的联接顺序、但是与该执行计划不同的另一执行计划。新创建的线程向相同结果集合152保存行,并且使用与当前线程相同的UID日志162, 控制继而继续块740,其中DBMS 150将待执行的用于执行计划的当前部分设置为用于执行计划的下一未执行部分。控制继而返回到块710,其中DBMS 150如上文先前描述的那样执行该执行计划的下一当前部分。在另一实施例中,如果处理UID、但是未向结果集合152添加UID标识的行,则 DBMS 150向UID日志162添加UID,从而使得另一执行计划的执行无需考虑UID。在一个
16实施例中,DBMS 150在处理行之前而不是在处理行之后检查UID日志162。如在此所使用的,已处理、但是未向结果集合152添加的行意味着已经从表读取、但是被丢弃而未向结果集合152添加的行。如果在块730处的确定为假,则第一个表和第二个表的相继联接从结果集合消除的行的比例未大于饥饿阈值,因而控制继续块740,其中DBMS 150将待执行的执行计划的当前部分设置为执行计划的下一未执行部分而不创建新线程。控制继而返回到块710,其中 DBMS 150如上文先前描述的那样执行该执行计划的下一当前部分。因此,在一个实施例中,如果尚未通过执行任何其它执行计划来向结果集合添加行,则通过执行一个执行计划来向结果集合存储该行,因而通过执行所有不同执行计划来向结果集合添加的行的交集为空集。按照这种方式,在一个实施例中,比仅执行一个执行计划提供更佳性能。在此所使用的术语仅出于描述具体实施例的目的而并非意在限制本发明。如在此所使用的,除非上下文另有清楚指示,单数形式“一个/ 一种”和“该”意在于也包括复数形式。还应当理解,术语“包括”在使用于本说明书中时指定存在记载的特征、整体、步骤、 操作、单元和/或部件,但是并未排除存在或者添加一个或者多个其它特征、整体、步骤、操作、单元、部件和/或其分组。在对本发明的示例性实施例的先前具体描述中,参照如下附图(其中相似标号代表相似单元),这些附图形成该描述的一部分,并且在附图中通过示例来示出可以对本发明进行实现的具体示例性实施例。采用充分细节描述这些实施例以使得本领域技术人员能够实现本发明,但是可以利用其它实施例并且可以进行逻辑、机械、电性和其它改变而不脱离本发明的范围。在前文描述中,阐述了诸多具体细节以提供对本发明的实施例的透彻理解。但是,没有这些具体细节仍然可以实现本发明的实施例。在其它实例中,没有详细示出公知电路、结构和技术以免使本发明的实施例难以理解。如在本说明书内使用的词汇“实施例”的不同实例并不必须指代相同实施例,但是它们可以指代相同实施例。在此图示或者描述的任何数据和数据结构仅为示例,并且在其它实施例中,可以使用不同数据量、数据类型、字段、字段数目和类型、字段名称、行数目和类型、记录、条目或者数据组织。此外,任何数据可以与逻辑组合,从而使得单独数据结构并非必需。前文具体描述因此将不被理解成限制意义。
权利要求
1.一种方法,包括指明由实施查询的第一执行计划指定的第一驱动程序源;指明由实施所述查询的第二执行计划指定的第二驱动程序源;执行所述第一执行计划的部分;执行所述第二执行计划的部分;以及如果通过所述执行所述第一执行计划的所述部分所返回的第一行的唯一标识符不匹配通过所述执行所述第二执行计划的所述部分向结果集合保存的来自所述第二驱动程序源的所有行的所有唯一标识符,则向所述结果集合添加通过所述执行所述第一执行计划的所述部分所返回的所述第一行,并且向唯一标识符日志添加通过所述执行所述第一执行计划的所述部分所返回的所述第一行的所述唯一标识符。
2.根据权利要求1所述的方法,还包括如果通过所述执行所述第一执行计划所返回的所述第一行的所述唯一标识符匹配通过所述执行所述第二执行计划向所述结果集合保存的来自所述第二驱动程序源的行的唯一标识符,则阻止向所述结果集合添加通过所述执行所述第一执行计划的所述第一行,并且阻止向所述唯一标识符日志添加通过所述执行所述第一执行计划所返回的所述第一行的所述唯一标识符。
3.根据权利要求1所述的方法,其中所述第一执行计划不同于所述第二执行计划,并且所述第一驱动程序源不同于所述第二驱动程序源。
4.根据权利要求1所述的方法,其中所述第一执行计划包括第一联接顺序并且所述第二执行计划包括第二联接顺序,其中所述第一联接顺序不同于所述第二联接顺序,并且其中所述执行所述第二执行计划的所述部分与所述执行所述第一执行计划的所述部分并行执行。
5.根据权利要求1所述的方法,其中所述第一执行计划包括多个表的联接顺序并且所述第二执行计划包括所述多个表的所述联接顺序,并且其中所述第一执行计划指定扫描所述多个表中的一个表的索引并且所述第二执行计划指定扫描所述多个表中的所述一个表而不使用所述索引。
6.根据权利要求1所述的方法,还包括通过所述执行所述第一执行计划的所述部分向所述结果集合存储第一多行;并且通过所述执行所述第二执行计划的所述部分向所述结果集合存储第二多行,其中所述第一多行和所述第二多行的交集为空集。
7.根据权利要求6所述的方法,还包括如果所述通过所述执行所述第一执行计划的所述部分向所述结果集合存储所述第一多行的速率大于比通过所述执行所述第二执行计划的所述部分向所述结果集合存储所述第二多行的速率更慢的阈值,则中止所述执行所述第一执行计划的所述部分。
8.一种计算机系统,包括处理器;以及存储器,其通信地耦合到所述处理器,其中所述存储器使用指令来编码,其中所述指令在由所述处理器执行时包括指明由实施查询的第一执行计划指定的第一驱动程序源;指明由实施所述查询的第二执行计划指定的第二驱动程序源;执行所述第一执行计划的部分;执行所述第二执行计划的部分;如果通过所述执行所述第一执行计划的所述部分所返回的第一行的唯一标识符不匹配通过所述执行所述第二执行计划的所述部分向结果集合保存的来自所述第二驱动程序源的所有行的所有唯一标识符,则向所述结果集合添加通过所述执行所述第一执行计划的所述部分所返回的所述第一行,并且向唯一标识符日志添加通过所述执行所述第一执行计划的所述部分所返回的所述第一行的所述唯一标识符,并且如果通过所述执行所述第一执行计划所返回的所述第一行的所述唯一标识符匹配通过所述执行所述第二执行计划向所述结果集合保存的来自所述第二驱动程序源< >的行的唯一标识符,则阻止向所述结果集合添加通过所述执行所述第一执行计划的所述第一行,并且阻止向所述唯一标识符日志添加通过所述执行所述第一执行计划所返回的所述第一行的所述唯一标识符。
9.根据权利要求8所述的计算机系统,其中所述第一执行计划不同于所述第二执行计划,并且所述第一驱动程序源不同于所述第二驱动程序源。
10.根据权利要求8所述的计算机系统,其中所述第一执行计划包括第一联接顺序并且所述第二执行计划包括第二联接顺序,其中所述第一联接顺序不同于所述第二联接顺序,并且其中所述执行所述第二执行计划的所述部分与所述执行所述第一执行计划的所述部分并行执行。
11.根据权利要求8所述的方法,其中所述第一执行计划包括多个表的联接顺序并且所述第二执行计划包括所述多个表的所述联接顺序,并且其中所述第一执行计划指定扫描所述多个表中的一个表的索引并且所述第二执行计划指定扫描所述多个表中的所述一个表而不使用所述索引。
12.根据权利要求8所述的方法,其中所述指令还包括通过所述执行所述第一执行计划的所述部分向所述结果集合存储第一多行;并且通过所述执行所述第二执行计划的所述部分向所述结果集合存储第二多行,其中所述第一多行和所述第二多行的交集为空集。
13.根据权利要求12所述的方法,其中所述指令还包括如果所述通过所述执行所述第一执行计划的所述部分向所述结果集合存储所述第一多行的速率大于比通过所述执行所述第二执行计划的所述部分向所述结果集合存储所述第二多行的速率更慢的阈值,则中止所述执行所述第一执行计划的所述部分。
全文摘要
本发明涉及用于在多个线程中使用执行计划处理查询的方法和系统。在一个实施例中,指明由实施查询的第一执行计划指定的第一驱动程序源,并且指明由实施查询的第二执行计划指定的第二驱动程序源。执行第一执行计划的部分和第二执行计划的部分。如果通过执行第一执行计划的部分所返回的第一行的唯一标识符不匹配通过执行第二执行计划的部分向结果集合保存的来自第二驱动程序源的所有行的所有唯一标识符,则向结果集合添加通过执行第一执行计划的部分所返回的第一行,并且向唯一标识符日志添加通过执行第一执行计划的部分所返回的第一行的唯一标识符。
文档编号G06F9/46GK102541631SQ20111035309
公开日2012年7月4日 申请日期2011年11月7日 优先权日2010年12月21日
发明者B·R·穆拉斯, R·J·贝斯特根, R·V·道纳 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1