CN109241093B - 一种数据查询的方法、相关装置及数据库系统 - Google Patents
一种数据查询的方法、相关装置及数据库系统 Download PDFInfo
- Publication number
- CN109241093B CN109241093B CN201710527453.3A CN201710527453A CN109241093B CN 109241093 B CN109241093 B CN 109241093B CN 201710527453 A CN201710527453 A CN 201710527453A CN 109241093 B CN109241093 B CN 109241093B
- Authority
- CN
- China
- Prior art keywords
- query
- sub
- data
- tuple
- parent
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Abstract
本申请实施例公开了一种数据查询的方法,包括:接收数据查询请求,数据查询请求包含子查询以及子查询对应的父查询;确定数据查询请求的子查询估算代价值;若子查询估算代价值小于预设门限,则根据父查询传入的多个参数值构建父查询数据表,并对所述父查询数据表中的元组进行排序,以得到目标查询数据表;若目标查询数据表中第一元组对应的参数值与第二元组对应的参数值不一致,则根据第一元组对应的参数值执行子查询以获取第一数据查询结果。本申请实施例公开了一种数据查询装置及数据库系统。本申请实施例可以避免使用同样的参数进行重复计算,从而提升查询速度,降低执行开销,有利于性能的提升。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及一种数据查询的方法、相关装置及数据库系统。
背景技术
随着互联网技术的快速发展,许多应用均伴随着大量数据的产生,这些数据通过数据库来保存。同时应用可通过结构化查询语言(structured query language,SQL)查询从数据库获取所需的数据。子查询,也称为内查询(Inner Query)或嵌套查询(NestedQuery),是一种嵌套在其他SQL查询的输出列或WHERE子句中的查询。被嵌套的该其他SQL查询也称为父查询或者外层查询(Outer Query)。子查询包括相关子查询和非相关子查询,如果外层查询是有变参传入子查询中,则该子查询为相关子查询,否则为非相关子查询。
为了提升子查询效率,现有技术通常可将子查询转化为联接(join),转化为join后通过高效的表连接算法,能够使得执行效率得以大幅提升。但是并不是所有的子查询都能转化为join来执行的。例如,对于如下不能转化为join的子查询:
select*from t1 where a1>(select avg(a2)from t2 where b1<b2);
在获取t1表每条语句的a1值和b1值后,需要对t2表进行扫描,如果满足b1值<b2值的条件,则记录a2值,然后求解a2值的平均值avg。如果a1值>平均值avg,则输出 t1表中的这条语句。整个过程需要对t1表扫描一遍,并且需要对t2表扫描多遍,这是一个迭代的过程,扫描次数等于t1表的记录数。
然而,在实际应用中,如果出现t1表中存在重复传入的参数b1值,则迭代到子查询中计算平均值avg的过程将会是重复的,从而导致查询速度降低,执行开销增大,造成性能下降。
发明内容
本申请实施例提供了一种数据查询的方法、相关装置及数据库系统,可以避免使用同样的参数进行重复计算,从而提升查询速度,降低执行开销,有利于性能的提升。
本申请实施例的第一方面提供一种数据查询的方法,可以包括:
数据查询装置首先接收用户触发的数据查询请求,该数据查询请求可以认为是一个执行计划(plan),且该数据查询请求包含子查询以及子查询对应的父查询,子查询的执行依赖于父查询传入的多个参数值。
接下来数据查询装置需要根据数据查询请求先计算本次子查询所需的子查询估算代价值,子查询估算代价值主要用于指示对父查询传入的多个参数值排序后执行子查询的代价,同时,子查询估算代价值还可以指示对父查询数据表中各条元组进行排序的代价大小。这里所提到的“代价”可以是指执行的步骤、指令或操作的数目,可以用时间、时间复杂度等来表示。此外,子查询估算代价值还与子查询对应的父查询传入的多个参数值的重复率相关。
如果计算得到的子查询估算代价值小于预设门限,那么数据查询装置会根据父查询传入的多个参数值构建父查询数据表,并对父查询数据表中的元组进行排序,然后得到目标查询数据表,其中,目标查询数据表中包含有多条元组,且每条元组可以包含至少一个参数值。通常情况下,目标查询数据表是按照传入参数值从大到小,或者从小到大的顺序排列的。
在数据查询装置获取到目标查询数据表后,需要获取目标查询数据表中第二元组的参数值和第一元组的参数值,其中,第一元组的参数值是在获取到第二元组的参数值之后得到的,即按照目标查询数据表顺序,确定第一元组是与第二元组之后的一个相邻元组。如果第一元组的参数值与第二元组的参数值不一致,则数据查询装置确定采用第一元组的参数值进行子查询,并获取第一数据查询结果。
本申请实施例中,提供了一种数据查询的方法,只有在子查询估算代价值小于预设门限的情况下,才对父查询传入的参数值进行排序,这样可以使得执行执行排序的开销小于复用参数值的开销。针对排序后得到的目标查询数据表,若第一元组的参数值与第二元组的参数值不一致,则进而可获取第一数据查询结果,以此避免使用同样的参数进行重复计算,从而提升查询速度,降低执行开销,有利于性能的提升。
在一种可能的设计中,在本申请实施例的第一方面的第一种实现方式中,如果数据查询装置在计算得到子查询估算代价值之后,判断该子查询估算代价值大于预设门限,则直接根据父查询数据表获取数据查询结果。
可以理解的是,在实际应用中,预设门限可以是0,也可以是其他合理的取值,此处不做限定。此外,当子查询估算代价值等于预设门限时,可以根据用户预先设定的规则,决定是否需要对父查询数据表进行排序。
其次,本申请实施例中,在数据查询装置判断得到子查询估算代价值大于预设门限时,可以直接通过父查询数据表来获取相应的数据查询结果。通过上述方式,若子查询估算代价值大于预设门限,则说明对父查询数据表进行排序的开销较大,从而在这种情况下选择不对该父查询数据包进行排序,而是直接获取数据查询结果,由于提升方案的实用性和灵活性。
在一种可能的设计中,在本申请实施例的第一方面的第二种实现方式中,在数据查询装置确定确定数据查询请求的子查询估算代价值,可以包括如下步骤:
数据查询装置根据父查询数据表中的元组数目以及父查询传入的多个参数值中非重复的参数值的数目,可以计算出子查询估算代价值。
其中,元组是关系数据库中的基本概念,数据表中的每一行就是一个元组,元组也可以称为记录。父查询数据表中的元组数目可以认为是父查询数据表中的记录行数。
其次,本申请实施例中,数据查询装置可以根据父查询数据表中的元组数目以及父查询传入的多个参数值中非重复的参数值的数目来确定子查询估算代价值。通过上述方式,可以提升计算子查询估算代价值的合理性,同时,计算得到的子查询估算代价值考虑到不同参数的影响,因此具有更强的可靠性。
在一种可能的设计中,在本申请实施例的第一方面的第三种实现方式中,数据查询装置根据父查询数据表中的元组数目以及父查询传入的多个参数值中非重复的参数值的数目确定所述子查询估算代价值,具体可以包括如下步骤:
首先数据查询装置根据父查询数据表中的元组数目、父查询传入的多个参数值中非重复的参数值的数目以及子查询执行代价值,计算出子查询节省代价值,其中,该子查询执行代价值与子查询数据表中的元组数目具有关联关系。子查询执行代价值指示执行一次子查询的代价,子查询数据表对应于目标查询数据表中的一条元组,也就是父查询数据表中一条元组对应着一个子查询数据表。
然后数据查询装置会根据父查询排序代价值与子查询节省代价值之间的差值来确定子查询估算代价值,其中,父查询排序代价值与父查询数据表中的元组数目具有关联关系,通常情况下,父查询数据表中的元组数目越多,所需要查询的次数就越多,因此父查询排序代价值也就越大,父查询排序代价值指示对父查询数据表进行一次排序操作的代价。
再次,本申请实施例中,介绍了计算子查询估算代价值的具体方式,即先根据元组数目、非重复的参数值的数目以及子查询执行代价值,计算子查询节省代价值,再利用父查询排序代价值与该子查询节省代价值之间的差值确定子查询估算代价值。通过上述方式,可以进一步提升计算子查询估算代价值的合理性,同时,提供了一种计算方式,从而使得方案更具有更强的可行性和实用性。
在一种可能的设计中,在本申请实施例的第一方面的第四种实现方式中,在数据查询装置采用第一元组的参数值进行子查询,并获取第一数据查询结果之后,还可以进一步缓存该第一数据查询结果。
缓存就是数据交换的缓冲区,当某一硬件要读取数据时,会首先从缓存中查找需要的数据,如果找到了则直接执行,找不到的话则从内存中找。由于缓存的运行速度比内存快得多,故缓存的作用就是帮助硬件更快地运行。
进一步地,本申请实施例中,在数据查询装置可以进一步缓存第一数据查询结果。通过上述方式,缓存已经得到的第一数据查询结果便于后续直接进行提取,无需重复采用相同的参数值获取数据查询结果,从而提升查询速度,降低执行开销,有利于性能的提升。
在一种可能的设计中,在本申请实施例的第一方面的第五种实现方式中,数据查询装置首先获取目标查询数据表中第三元组的参数值,该第三元组的参数值是在获取到第一元组参数值之后得到的,参数值的获取排序依次是第二元组的参数值、第一元组的参数值和第三元组的参数值。
然后,数据查询装置将判断目标查询数据表中第三元组的参数值与第一元组的参数值是否一致,若一致,则获取已缓存的第一数据查询结果。
更进一步地,本申请实施例中,数据查询装置还可以获取目标查询数据表中第三元组的参数值,其中,第三元组的参数值是在获取到第一元组的参数值之后得到的,若第三元组的参数值与第一元组的参数值一致,则可以直接获取已缓存的第一数据查询结果即可。通过上述方式,对于有参数重复的子查询仅计算一次,减少了计算量,从而提高查询效率。
在一种可能的设计中,在本申请实施例的第一方面的第六种实现方式中,如果目标查询数据表中第三元组的参数值与第一元组的参数值不一致,则可以将第三元组的参数值作为一个新的传入参数,然后传入迭代的子查询内部计算子查询的结果,即得到第二数据查询结果。
数据查询装置在得到第二数据查询结果之后,将缓存该第二数据查询结果,并清除之前缓存的第一数据查询结果。
再进一步地,本申请实施例中,若目标查询数据表中第三元组的参数值与第一元组的参数值不一致,则数据查询装置还可以根据第三元组的参数值获取第二数据查询结果,在得到第二数据查询结果之后,会擦除原本缓存的第一数据查询结果。通过上述方式,可以只缓存一个数据查询结果,一方面可以减少缓存的数据量,另一方面,便于快速提取所需的数据查询结果,从而提升方案的实用性。
本申请实施例的第二方面提供一种数据查询装置,可以包括:
接收模块,用于接收数据查询请求,数据查询请求包含子查询以及子查询对应的父查询,子查询的执行依赖于父查询传入的多个参数值;
确定模块,用于确定接收模块接收的数据查询请求的子查询估算代价值,其中,子查询估算代价值指示对父查询传入的多个参数值排序后执行子查询的代价,子查询估算代价值与子查询对应的父查询传入的多个参数值的重复率相关;
构建模块,用于若确定模块确定的子查询估算代价值小于预设门限,则根据父查询传入的多个参数值构建父查询数据表,并对父查询数据表中的元组进行排序,以得到目标查询数据表,其中,父查询数据表包含多个参数值对应的多条元组;
第一获取模块,用于若构建模块构建的所述目标查询数据表中第一元组对应的参数值与第二元组对应的参数值不一致,则根据第一元组对应的参数值执行子查询以获取第一数据查询结果,其中,第一元组为按照排序与第二元组后相邻的元组。
在一种可能的设计中,在本申请实施例的第二方面的第一种实现方式中,数据查询装置还可以包括:
第二获取模块,用于若构建模块构建的子查询估算代价值大于预设门限,则根据父查询数据表获取数据查询结果。
在一种可能的设计中,在本申请实施例的第二方面的第二种实现方式中,确定模块可以包括:
确定单元,用于根据父查询数据表中的元组数目以及父查询传入的多个参数值中非重复的参数值的数目确定子查询估算代价值。
在一种可能的设计中,在本申请实施例的第二方面的第三种实现方式中,确定单元可以包括:
计算子单元,用于根据元组数目、非重复的参数值的数目以及子查询执行代价值,计算子查询节省代价值,其中,子查询执行代价值与子查询数据表中的元组数目具有关联关系,子查询执行代价值指示执行一次子查询的代价,子查询数据表对应于目标查询数据表中的一条元组;
确定子单元,用于根据父查询排序代价值与计算子单元计算得到的子查询节省代价值之间的差值确定子查询估算代价值,其中,父查询排序代价值与父查询数据表中的元组数目具有关联关系,父查询排序代价值指示对父查询数据表进行一次排序操作的代价。
在一种可能的设计中,在本申请实施例的第二方面的第四种实现方式中,数据查询装置还可以包括:
第一缓存模块,用于缓存第一数据查询结果。
在一种可能的设计中,在本申请实施例的第二方面的第五种实现方式中,数据查询装置还可以包括:
判断模块,用于判断目标查询数据表中第三元组的参数值与第一元组的参数值是否一致,若一致,则获取已缓存的第一数据查询结果,其中,第三元组的参数值是在获取到第一元组的参数值之后得到的。
在一种可能的设计中,在本申请实施例的第二方面的第六种实现方式中,数据查询装置还可以包括:
第三获取模块,用于若目标查询数据表中第三元组的参数值与第一元组的参数值不一致,则根据第三元组的参数值获取第二数据查询结果;
第二缓存模块,用于缓存第三获取模块获取的第二数据查询结果,并擦除第一数据查询结果。
第三方面,本申请实施例提供一种计算机设备,包括:处理器、存储器、总线和通信接口;该存储器用于存储计算机执行指令,该处理器与该存储器通过该总线连接,当该服务器运行时,该处理器执行该存储器存储的该计算机执行指令,以使该服务器执行如上述任一方面的方法。
第四方面,本申请实施例提供了一种计算机可读存储介质,用于储存为上述方法所用的计算机软件指令,当其在计算机上运行时,使得计算机可以执行上述中任一方面的方法。
第五方面,本申请实施例提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机可以执行上述任一方面的方法。
第六方面,本申请实施例提供了一种数据库系统,可以包括上述第二方面中任一项提供的数据查询装置和数据库。
另外,第二方面第六方面任一种设计方式所带来的技术效果可参见第一方面中不同设计方式所带来的技术效果,此处不再赘述。
从以上技术方案可以看出,本申请实施例具有以下优点:
本申请实施例中,提供了一种数据查询的方法,首先数据查询装置接收数据查询请求,该数据查询请求包含子查询以及子查询对应的父查询,子查询的执行依赖于所述父查询传入的多个参数值,然后确定数据查询请求的子查询估算代价值,子查询估算代价值指示对父查询传入的多个参数值排序后执行子查询的代价,子查询估算代价值与子查询对应的父查询传入的多个参数值的重复率相关,若子查询估算代价值小于预设门限,则数据查询装置会根据父查询传入的多个参数值构建父查询数据表,并对父查询数据表中的元组进行排序,以得到目标查询数据表,其中,父查询数据表包含多个参数值对应的多条元组,若所述目标查询数据表中第一元组对应的参数值与第二元组对应的参数值不一致,则根据第一元组对应的参数值执行子查询以获取第一数据查询结果,其中,第一元组为按照排序与第二元组后相邻的元组。通过上述方式,只有在子查询估算代价值小于预设门限的情况下,才对父查询传入的参数值进行排序,这样可以使得执行执行排序的开销小于复用参数值的开销。针对排序后得到的目标查询数据表,若第一元组的参数值与第二元组的参数值不一致,则进而可获取第一数据查询结果,以此避免使用同样的参数进行重复计算,从而提升查询速度,降低执行开销,有利于性能的提升。
附图说明
图1是应用本申请实施例的一个数据库系统示意性架构图;
图2是应用本申请实施例的单机数据库系统的示意图;
图3是应用本申请实施例的采用共享磁盘架构的集群数据库系统的示意图;
图4是应用本申请实施例的采用无共享磁盘架构的集群数据库系统的示意图;
图5是应用本申请实施例的数据库服务器的示意图;
图6为本申请实施例中数据查询的方法一个实施例示意图;
图7为本申请实施例中数据查询的方法另一个实施例示意图;
图8为本申请实施例中选择数据查询方法的一个流程示意图;
图9为本申请实施例中数据查询装置一个实施例示意图;
图10为本申请实施例中数据查询装置另一个实施例示意图;
图11为本申请实施例中数据查询装置另一个实施例示意图;
图12为本申请实施例中数据查询装置另一个实施例示意图;
图13为本申请实施例中数据查询装置另一个实施例示意图;
图14为本申请实施例中数据查询装置另一个实施例示意图;
图15为本申请实施例中数据查询装置另一个实施例示意图;
图16为本申请实施例中数据查询装置一个结构示意图;
图17为本申请实施例中数据库系统一个框架示意图。
具体实施方式
本申请实施例提供了一种数据查询的方法、相关装置及数据库系统,可以避免使用同样的参数进行重复计算,从而提升查询速度,降低执行开销,有利于性能的提升。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的排序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例例如能够以除了在这里图示或描述的那些以外的排序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
应理解,本申请实施例的技术方案可以用于数据库系统(Database System)或数据库管理系统(Database Management System,DBMS)中,比如关系型数据库管理系统。
本申请实施例所应用的数据库系统的架构如图1所示,该数据库系统包括数据库和数据库管理系统DBMS。其中,数据库是指存储在数据存储器中的有组织的数据集合,即按照一定的数据模型组织、存储和使用的相关联的数据集合,比如,数据库可以包括一个或者多个表数据。
DBMS用于建立、使用和维护数据库,以及对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。用户可以通过DBMS访问数据库中的数据,数据库管理员也通过DBMS进行数据库的维护工作。DBMS提供多种功能,可使多个应用程序和用户设备使用不同的方法,在同一时刻或不同时刻去建立,修改和询问数据库,应用程序和用户设备可以统称为客户端。DBMS所提供的功能可以包括以下几项:(1)数据定义功能, DBMS提供数据定义语言(Data Definition Language,DDL)来定义数据库结构,DDL用于刻画数据库框架,并可以被保存在数据字典中;(2)数据存取功能,DBMS提供数据操纵语言(Data ManipulationLanguage,DML),实现对数据库数据的基本存取操作,比如检索、插入、修改和删除;(3)数据库运行管理功能,DBMS提供数据控制功能,即是数据的安全性、完整性和并发控制等对数据库运行进行有效地控制和管理,以确保数据正确有效;(4)数据库的建立和维护功能,包括数据库初始数据的装入,数据库的转储、恢复、重组织,系统性能监视、分析等功能;(5)数据库的传输,DBMS提供处理数据的传输,实现客户端与DBMS之间的通信,通常与操作系统协调完成。
具体地,图2为单机数据库系统示意图,包括一个数据库管理系统和数据存储器,该数据库管理系统用于提供数据库的查询和修改等服务,该数据库管理系统将数据存储到数据存储器中。在单机数据库系统中,数据库管理系统和数据存储器通常位于单一服务器上,比如一台对称多处理器(Symmetric Multi-Processor,SMP)服务器。该SMP服务器包括多个处理器,所有的处理器共享资源,如总线,内存和I/O系统等。数据库管理系统的功能可由一个或多个处理器执行内存中的程序来实现。
图3为采用共享磁盘(Shared-storage)架构的集群数据库系统示意图,包括多个节点 (如图3中的节点1-N),每个节点部署有数据库管理系统,分别为用户提供数据库的查询和修改等服务,多个数据库管理系统存储有共享的数据在共享数据存储器中,并且通过交换机对数据存储器中的数据执行读写操作。共享数据存储器可以为共享磁盘阵列。集群数据库系统中的节点可以为物理机,比如数据库服务器,也可以为运行在抽象硬件资源上的虚拟机。若节点为物理机,则交换机为存储区网络(Storage Area Network,SAN) 交换机、以太网交换机,光纤交换机或其它物理交换设备。若节点为虚拟机,则交换机为虚拟交换机。
图4为采用无共享(Shared-nothing)架构的集群数据库系统示意图,每个节点具有各自独享的硬件资源(如数据存储器)、操作系统和数据库,节点之间通过网络来通信。该体系下,数据将根据数据库模型和应用特点被分布到各个节点上,查询任务将被分割成若干部分,在所有节点上并行执行,彼此协同计算,作为整体提供数据库服务,所有通信功能都在一个高宽带网络互联体系上实现。如同图3所描述的共享磁盘架构的集群数据库系统一样,这里的节点既可以是物理机,也可以是虚拟机。
在本申请所有实施例中,数据库系统的数据存储器包括但不限于固态硬盘(SSD)、磁盘阵列或其他类型的非瞬态计算机可读介质。图2至图4中虽未示出数据库,应理解,数据库存储在数据存储器中。所属领域的技术人员可以理解一个数据库系统可能包括比图2至图4中所示的部件更少或更多的组件,或者包括与图2至图4中所示组件不同的组件,图2至图4仅仅示出了与本申请实施例所公开的实现方式更加相关的组件。例如,虽然图3和至图4中已经描述了4个节点,但所属领域的技术人员可理解成一个集群数据库系统可包含任何数量的节点。各节点的数据库管理系统功能可分别由运行在各节点上的软件、硬件和/或固件的适当组合来实现。
本领域技术人员根据本申请实施例的教导可以很清楚地理解,本申请实施例的方法可典型地应用于数据库管理系统,该数据库管理系统安装或者部署在单机数据库系统、Shared-nothing架构的集群数据库系统、Shared-storage架构的集群数据库系统,或其它类型的数据库系统中。
为了便于理解和描述,作为示例而非限定,下面以数据库服务器为例说明本申请实施例的方案。该数据库服务器具体可以为图2所述的单机数据库系统中的SMP服务器,或者图3或图4中所述的一个节点。具体的,如图5所示,数据库服务器100,包括:至少一个处理器104、存储可执行代码的非暂时性 计算机可读介质(non-transitory computer-readable medium)106和数据库管理系统108。所述可执行代码在被至少一个处理器104执行时被配置为实现数据库管理系统108的组件和功能。非暂时性 计算机可读介质 106可以包括一个或多个非易失性存储器,作为示例,非易失性存储器包括半导体存储器设备,例如可擦可编程只读存储器(Erasable Programmable Read Only Memory, EPROM),电可擦只读存储器(Electrically Erasable Programmable Read Only Memory, EEPROM)和闪存(flash memory);磁盘,例如内部硬盘(internal hard disk)或可移动磁盘(removabledisk),磁光盘(magneto optical disk),以及CD ROM和DVD-ROM。此外,非暂时性 计算机可读介质106还可以包括被配置为主存储器(main memory)的任何设备。至少一个处理器104可以包括任何类型的通用计算电路或专用逻辑电路,例如现场可编程门阵列(Field-Programmable Gate Array,FPGA)或专用集成电路(Application Specific IntegratedCircuit,ASIC)。至少一个处理器104也可以是耦合到一个或多个半导体基板的一个或多个处理器,例如CPU。
数据库管理系统108可以是关系型数据库管理系统(Relational DatabaseManagement System,RDBMS)。数据库管理系统108支持结构化查询语言(Structured QueryLanguage,SQL)。通常,SQL是指专门用于管理关系型数据库中保存的数据的专用编程语言。SQL可以指代各种类型的数据相关语言,包括例如数据定义语言和数据操纵语言,其中SQL的范围可以包括数据插入,查询,更新和删除,模式创建和修改以及数据访问控制。此外,在一些示例中,SQL可以包括与各种语言元素相关的描述,包括子句 (clause),表达式(expression),谓词(predicate),查询(query)和语句(statement)。其中,表达式可以被配置为产生包括数据列和/或行的标量值(scalar value)和/或表。谓词 (Predicate,简称PRED)是计算结果为逻辑值(比如TRUE、FALSE、UNKNOWN)的逻辑表达式,可以用于描述对象之间的连接关系。比如,在SELECT查询语句中,在 WHERE子句和HAVING子句中的过滤条件可以理解为指定谓词。
查询(query)是请求查看,访问和/或操纵存储在数据库中的数据。例如,数据库管理系统108可以从数据库客户端102接收SQL格式的查询(称为SQL查询)。通常,数据库管理系统108通过通信接口,比如应用程序接口(API)或者以太网接口等网络接口接收客户端的查询,从数据库访问相关数据并操纵相关数据以生成查询所对应的查询结果,并将查询结果通过上述通信接口返回到数据库客户端102。数据库是按一定的数学模型组织、描述和存储的数据集合,数据库可以包括一个或多个数据库结构或格式,例如行存储和列存储。数据库通常存储于数据存储器中,比如图5中的外部数据存储器120,或者非暂时性 计算机可读介质106。当数据库存储于非暂时性 计算机可读介质106时,数据库管理系统108为内存数据库管理系统。
数据库客户端102可以包括被配置成与数据库管理系统108交互的任何类型的设备或应用程序。在一些示例中,数据库客户端102包括一个或多个应用服务器。
数据库管理系统108包括解析器112、查询优化器114、查询执行器122和存储引擎134。解析器112 用于执行对客户端102提交的查询(Query)的语法、语义分析,将查询中的视图展开、划分为小的查询块。查询优化器114为查询生成一组可能被使用的执行计划,估算出每个执行计划的代价,比较计划的代价,最终选择一个最优的执行计划。查询执行器122依照查询的执行计划进行操作,以产生查询结果。存储引擎134负责管理表的数据、索引的实际内容,同时也会管理运行时的Cache、Buffer、事务、Log等数据。例如存储引擎134可以将查询执行器 122的执行结果通过物理I/O写入数据存储器120。
查询优化器114选择最优执行计划过程中,需要考虑数据查询的效率,选择高效的方式进行数据查询很大程度上能够提升设备性能。查询优化器114根据子查询估算代价值的计算模型,生成改进的父查询排序和子查询结果复用的执行计划,在执行时,对子查询结果进行复用,从而减少子查询执行的开销。
基于以上描述的数据库服务器100本申请实施例针对子查询估算代价值小于预设门限的情况,提出了一种数据查询的方法,以避免使用同样的参数进行重复计算,从而提升查询速度,降低执行开销,有利于性能的提升。
图6示出了根据本申请实施例的数据查询方法的示意性流程图,参照图5,本申请实施例中的执行主体为数据库管理系统,具体可以为数据库管理系统中的查询优化器和查询执行器,该方法主要可以包括:
201、接收数据查询请求,数据查询请求包含子查询以及子查询对应的父查询,子查询的执行依赖于父查询传入的多个参数值;
本实施例中,数据查询装置接收用户触发的包含子查询和父查询的数据查询请求,该数据查询请求可以理解为是一个执行计划的请求。
一个执行计划是由若干基本操作组成的.例如,遍历整张数据表,利用索引,执行一个嵌套循环或哈希连接等等。举个例子,可以利用一个SQL语句从服务器取出所有住在中国的客户,当数据查询装置收到的这条SQL的时候,如果这条SQL没有语法错误才会继续工作。数据查询装置会决定最好的计算方式,比如数据查询装置会选择读整个客户表好,还是利用索引会比较快些。数据查询装置会比较所有可能方法所耗费的资源,最终SQL语句被物理性执行的方法被称做执行计划或者是查询计划。
负责处理或计算最优的执行计划的组件叫查询优化器,查询优化器是建立在其所在的数据库资源的基础上而进行工作的。
202、确定数据查询请求的子查询估算代价值,其中,子查询估算代价值指示对父查询传入的多个参数值排序后执行子查询的代价,子查询估算代价值与子查询对应的父查询传入的多个参数值的重复率相关;
本实施例中,数据查询装置根据数据查询请求先计算本次子查询所需的子查询估算代价值,子查询估算代价值主要用于指示对父查询传入的多个参数值排序后执行子查询的代价,这个代价是指执行的步骤、指令或操作的数目,可以用时间、时间复杂度等来表示,此处不做限定。子查询估算代价值作为是否对父查询传入的参数值排序的判决因子,与对父查询按传入参数值进行排序后再执行子查询的执行代价直接相关,而执行代价的大小取决于父查询传入的多个参数的重复率。父查询传入的参数值的重复率越高,则对父查询按传入的参数值进行排序后再执行子查询的执行代价就越高,相应地,子查询估算代价值也就越高。
下面通过具体的实例介绍计算子查询估算代价值的方式。
数据查询装置根据首先根据元组数目、非重复的参数值的数目以及子查询执行代价值计算子查询节省代价值,然后根据父查询排序代价值与子查询节省代价值之间的差值确定子查询估算代价值,其中,子查询执行代价值与子查询数据表中的元组数目具有关联关系,子查询执行代价值指示执行一次子查询的代价,子查询数据表对应于目标查询数据表中的一条元组,父查询排序代价值与父查询数据表中的元组数目具有关联关系,父查询排序代价值指示对父查询数据表进行一次排序操作的代价。
元组是关系数据库中的基本概念,关系是一张数据表,数据表中的每一行(即数据表中的每条记录)就是一个元组,每列就是一个属性,在二维数据表里,元组也可以称为记录。举个例子,假设表1为一个父查询数据表,请参阅表1。
表1
元组序列 | 参数值 |
1 | 51 |
2 | 60 |
3 | 26 |
4 | 51 |
5 | 29 |
6 | 5 |
如表1所示,在表1对应的父查询数据表中,父查询数据表的元组数目为6,参数值为51的有两个元组,因此,非重复的参数值的数目为5。根据父查询数据表的元组数目以及非重复的参数值的数目,可以利用如下公式计算子查询估算代价值。
其中,Δcost表示子查询估算代价值,cost(sort)表示父查询排序代价值,表示子查询节省代价值。rowsi表示父查询数据表中的元组数目,agg_rowsi表示父查询数据表中非重复的参数值的数目,cost(subplani) 表示i个子查询对应的子查询执行代价值,子查询执行代价值与子查询数据表中的元组数目具有关联关系。
具体地,下面将利用两个具体的应用场景介绍如何利用上述公式计算得到子查询估算代价值。
方式一,针对只存在一个子查询的父查询数据表;
例如对于如下SQL语句:
select*from t1 where a1>(select avg(a2)from t2 where b1<b2);
假如根据统计信息得知父查询数据表(t1表)的元组数目为100000行,子查询数据表(t2表)的元组数目为100行,t1表具有参数值b1,t1表中b1的参数去重数目为5个,则根据估算信息,可以求得:
Δcost=cost(sort)-(rows-agg_rows)*cost(subplan)
=cost(sort)-(100000-5)*cost(subplan)
=150-99995*2
=-199840
其中,cost(sort)表示父查询排序代价值,这里的cost(sort)设定为150,父查询排序代价值与父查询数据表中的元组数目具有关联关系,通常情况下,父查询数据表中的元组数目越多,所需要查询的次数就越多,因此父查询排序代价值也就越大,父查询排序代价值可以根据一套预设机制进行确定,此处不作详细介绍。类似地,这里的cost(subplan)设定为2,子查询执行代价值与子查询数据表中的元组数目具有关联关系,通常情况下,子查询数据表中的元组数目越多,所需要查询的次数就越多,因此子查询执行代价值也就越大,子查询执行代价值也可以根据一套预设机制进行确定,此处不作详细介绍。
由于上述子查询估算代价值小于0,因此最终查询优化器选择该语句的执行计划可以为:
根据此执行计划,查询执行器在执行时,会选择先对父查询数据表进行排序,然后再调用子查询数据表以获得子查询的结果,同时子查询的结果是可以共用的。
对于同样的查询,假如根据统计信息得知父查询数据表(t1表)的元组数目为100000 行,子查询数据表(t2表)的元组数目为100行,t1表具有参数值b1,t1表中b1的参数去重数目为99995个,则根据估算信息,可以求得:
Δcost=cost(sort)-(rows-agg_rows)*cost(subplan)
=cost(sort)-(100000-99995)*cost(subplan)
=150-5*2
=140
其中,这里同样假设cost(sort)为150,cost(subplan)为2。
由于上述子查询估算代价值大于0,因此最终查询优化器选择该语句的执行计划可以为:
根据该执行计划,查询执行器在执行时将不对父查询数据表进行排序,且子查询的结果不可以共用。
可以理解的是,本实施例中将预设门限确定为0,然而在实际应用中,该预设门限还可以进行适当的调整,以满足排序的需求,此处仅为一个示意,并不应构成对本发明的限定。
方式二,针对存在多个子查询的父查询数据表;
例如对于如下SQL语句:
select*from t1 where a1>(select avg(a2)from t2 where b1<b2)and c1<(select sum(c2) from t2 where d1<d2)and e1 not in(select e2 from t2 where b1=f2);
此查询中包含了三个子查询,传入的参数值分别为b1、d1和b1。不同的传入参数值组合包括b1和d1,且使用b1进行排序时,第一个子查询和第三个子查询的查询结果可以共用。使用d1进行排序时,第二个子查询的查询结果可以共用。
假如根据统计信息得知父查询数据表(t1表)的元组数目为100000行,子查询数据表(t2表)的元组数目为100行,t1表具有参数值b1,t1表中b1的参数去重数目为1000 个,t1表中d1的参数去重数目为5个,则根据估算信息,可以求得:
其中,cost(sort)表示父查询排序代价值,这里的cost(sort)设定为150。由于这里具有3个子查询,因此每个子查询对应一个cost(subplani),假设第一个子查询对应的cost(subplan1)为2,第二子查询对应的cost(subplan2)为2,第三子查询对应的 cost(subplan3)为1.5。可以理解的是,这里的cost(sort)和cost(subplani)仅为一个示意,并不理解为对方案的限定。
于是,从Δcost(b1)和Δcost(d1)中选择子查询估算代价值最小的进行排序,即选择Δcost(b1),查询优化器选择对b1列进行排序,该语句的执行计划为:
根据此执行计划,查询执行器在执行时,会选择先对父查询数据表按b1列进行排序,然后再调用子查询获得查询结果,同时第一个子查询和第三个子查询的结果是可以共用的。
可以理解的是,在实际情况中,还可能出现其他计算子查询估算代价值的情形,但总体思路均参照上述两个例子。类似的情况包含但不仅限于对于存在多个数据表的情况,子查询嵌套查询的情况以及传入多个参数的情况。
情形1、对于存在多个数据表的情况而言,例如对于如下SQL语句:
select*from t1 join t2 on a1=a2 where a1>(select avg(a2)from t2where b1<b2)and c1< (select sum(c2)from t2 where d1<d2)and e1 not in(selecte2 from t2 where b1=f2);
父查询数据表包括t1表和t2表,于是查询优化器会估算t1表和t2表join完的总元组数目,基于此估算a1的参数去重数目,然后套用公式进行子查询估算代价值的估算。
情形2、对于存在子查询嵌套查询的情况而言,将自底至上,分次分别计算每个子查询是否可以使用本申请进行优化,例如对于如下SQL语句:
select*from t1 where a1>(select avg(a2)from t2 where b1<b2 and c2>(select sum(d3) from t3 where a3=b2));
此查询会首先处理内部的子查询,通过t2表的元组数目和传入参数b2的参数去重数目确定t2是否需要进行排序。然后根据t1表的元组数目和传入参数b1的参数去重数目确定t1表是否需要进行排序。
情形3、传入多个参数的情况,分别评估每个子查询的传入参数,以及传入参数的子集,以选取最优排序列,例如对于如下SQL语句:
select*from t1 where a1>(select avg(a2)from t2 where b1<b2 and c1=c2)and c1< (select sum(c2)from t2 where d1<d2)and e1 not in(select e2 from t2where b1=f2 and e1>e2);
此查询中对应的三个子查询的传入参数为:第一个子查询的传入参数为b1和c1,第二个子查询的传入参数为b1,第三个子查询的传入参数为b1和e1。则排序列选择b1或 c1时,前两个子查询均可以缓存结果。如果选择b1或e1,则后两个可以缓存结果。以此考虑所有组合,选中最终的排序列。
203、若子查询估算代价值小于预设门限,则根据父查询传入的多个参数值构建父查询数据表,并对父查询数据表中的元组进行排序,以得到目标查询数据表,其中,父查询数据表包含多个参数值对应的多条元组;
当父查询传入的参数值重复率较高时,对这些参数值排序后再执行子查询,并缓存子查询执行结果可以明显节省子查询重复执行的次数,达到提高执行效率的目的。但当传入的参数值重复率较低时,排序和缓存的操作并不能减少的子查询计算次数,反而可能增加子查询的执行代价,造成性能劣化。因此,需要通过代价估算来判断是否执行参数值排序的操作。本实施例中,以子查询估算代价值作为判决因子,如果子查询估算代价值小于预设门限,则对父查询按传入参数值进行排序。然后,对于父查询数据表的每条元组,需要检测是否与上一条元组的传入参数相同。若相同,则直接利用上一条元组子查询的结果进行条件的过滤。子查询估算代价值可以反映对父查询按传入参数值进行排序后再执行子查询的执行代价,并且与父查询传入的多个参数的重复率相关。父查询传入的参数值的重复率越高,则对父查询按传入的参数值进行排序后再执行子查询的执行代价就越高,相应地,子查询估算代价值也就越高。
具体地,若子查询估算代价值小于预设门限,那么数据查询装置会根据父查询传入的多个参数值构建父查询数据表,并对父查询数据表中的元组进行排序,以得到目标查询数据表,其中,目标查询数据表中包含有多条元组,且每条元组可以包含至少一个参数值,比如第3条元组具有参数值x、参数y和参数z。为了便于理解,假设表2为一个父查询数据表,请参阅表2。
表2
元组序列 | 参数值a | 参数值b |
1 | 111 | 62 |
2 | 89 | 2 |
3 | 111 | 11 |
4 | 56 | 151 |
5 | 987 | 155 |
6 | 111 | 11 |
7 | 89 | 356 |
8 | 111 | 25 |
9 | 89 | 89 |
10 | 92 | 97 |
如果按照参数值从小到大进行排列,则可以得到如下表3所示的目标查询数据表。
表3
元组序列 | 参数值a | 参数值b |
1 | 56 | 151 |
2 | 89 | 2 |
3 | 89 | 89 |
4 | 89 | 356 |
5 | 92 | 97 |
6 | 111 | 11 |
7 | 111 | 25 |
8 | 111 | 62 |
9 | 111 | 89 |
10 | 987 | 155 |
其中,表2和表3中的参数值a和参数值b仅为一个示意,在实际应用中,一个数据表内可以有多个传入参数和多个非传入参数,这里以一个传入参数(即参数值a)和一个非传入参数(即参数值b)为例进行介绍,然而这并不应构成对本申请实施例的限定。
如果子查询估算代价值大于预设门限,则直接根据父查询数据表获取数据查询结果,也就不需要对该父查询数据表进行排序。
204、若目标查询数据表中第一元组对应的参数值与第二元组对应的参数值不一致,则根据第一元组对应的参数值执行子查询以获取第一数据查询结果,其中,第一元组为按照排序与第二元组后相邻的元组。
本实施例中,在数据查询装置获取到目标查询数据表后,需要获取目标查询数据表中第二元组的参数值和第一元组的参数值,其中,第一元组的参数值是在获取到第二元组的参数值之后得到的,即按照目标查询数据表顺序,确定第一元组是与第二元组之后的一个相邻元组。以表3为例,假设第一元组为6号元组,则第二元组为5号元组。接下来,数据查询装置需要判断第一元组的参数值与第二元组的参数值是否一致,如果第一元组的参数值和第二元组的参数值一致,则数据查询装置不进行数据查询。反之,如果第一元组的参数值与第二元组的参数值不一致,则数据查询装置确定采用第一元组的参数值进行子查询,并获取第一数据查询结果。
本申请实施例中,提供了一种数据查询的方法,首先数据查询装置接收数据查询请求,该数据查询请求包含子查询以及子查询对应的父查询,子查询的执行依赖于所述父查询传入的多个参数值,然后确定数据查询请求的子查询估算代价值,子查询估算代价值指示对父查询传入的多个参数值排序后执行子查询的代价,子查询估算代价值与子查询对应的父查询传入的多个参数值的重复率相关,若子查询估算代价值小于预设门限,则数据查询装置会根据父查询传入的多个参数值构建父查询数据表,并对父查询数据表中的元组进行排序,以得到目标查询数据表,其中,父查询数据表包含多个参数值对应的多条元组,若所述目标查询数据表中第一元组对应的参数值与第二元组对应的参数值不一致,则根据第一元组对应的参数值执行子查询以获取第一数据查询结果,其中,第一元组为按照排序与第二元组后相邻的元组。通过上述方式,只有在子查询估算代价值小于预设门限的情况下,才对父查询传入的参数值进行排序,这样可以使得执行执行排序的开销小于复用参数值的开销。针对排序后得到的目标查询数据表,若第一元组的参数值与第二元组的参数值不一致,则进而可获取第一数据查询结果,以此避免使用同样的参数进行重复计算,从而提升查询速度,降低执行开销,有利于性能的提升。
图7示出了根据本申请实施例的数据查询方法的另一个示意性流程图,参照图5,该方法包括:
301、接收包含子查询的数据查询请求;
本实施例中,数据查询装置接收用户触发的包含子查询的数据查询请求,该数据查询请求可以理解为是一个执行计划的请求。
302、确定数据查询请求对应的子查询估算代价值,其中,子查询估算代价值指示缓存子查询所对应的查询结果的代价,子查询估算代价值与子查询对应的父查询传入的多个参数的重复率相关;
本实施例中,数据查询装置根据数据查询请求先计算本次子查询所需的子查询估算代价值,子查询估算代价值主要用于指示缓存该子查询所对应的查询结果的代价,这个代价可以表示为字节数或者时间等,此处不做限定。子查询估算代价值还与子查询对应的父查询传入的多个参数的重复率相关。
303、若子查询估算代价值小于预设门限,则根据父查询传入的多个参数值构建父查询数据表,并对父查询数据表中的元组进行排序,以得到目标查询数据表,其中,父查询数据表包含所述多个参数值对应的多条元组;
本实施例中,如果子查询估算代价值小于预设门限,那么数据查询装置会根据父查询传入的多个参数值构建父查询数据表,并对父查询数据表中的元组进行排序,以得到目标查询数据表,其中,目标查询数据表中包含有多条元组,且每条元组可以包含至少一个参数值,比如第10条元组具有参数值x、参数y和参数z。
304、若目标查询数据表中第一元组对应的参数值与第二元组对应的参数值不一致,则根据第一元组对应的参数值执行子查询以获取第一数据查询结果,其中,第一元组为按照排序与第二元组后相邻的元组;
本实施例中,在数据查询装置获取到目标查询数据表后,需要获取目标查询数据表中第二元组的参数值和第一元组的参数值,其中,第一元组的参数值是在获取到第二元组的参数值之后得到的,即按照目标查询数据表顺序,确定第一元组是与第二元组之后的一个相邻元组。接下来,数据查询装置需要判断第一元组的参数值与第二元组的参数值是否一致,如果第一元组的参数值和第二元组的参数值一致,则数据查询装置不进行数据查询。反之,如果第一元组的参数值与第二元组的参数值不一致,则数据查询装置确定采用第一元组的参数值进行子查询,并获取第一数据查询结果。
可以理解的是,步骤301至步骤304可以参考上述图6对应的实施例中步骤201中步骤204中的描述,此处不做赘述。
305、缓存第一数据查询结果;
本实施例中,数据查询装置将缓存第一数据查询结果。
缓存就是数据交换的缓冲区,当某一硬件要读取数据时,会首先从缓存中查找需要的数据,如果找到了则直接执行,找不到的话则从内存中找。由于缓存的运行速度比内存快得多,故缓存的作用就是帮助硬件更快地运行。
306、判断目标查询数据表中第三元组的参数值与第一元组的参数值是否一致,其中,第三元组的参数值是在获取到第一元组的参数值之后得到的;
本实施例中,数据查询装置获取目标查询数据表中第三元组的参数值,该第三元组的参数值是在获取到第一元组参数值之后得到的,换言之,参数值的获取排序依次是第二元组的参数值、第一元组的参数值和第三元组的参数值。
数据查询装置需要判断目标查询数据表中第三元组的参数值与第二元组的参数值是否一致,也就是判断当前获取到的元组参数值与上一个相邻元组参数值是否一致,如果一致,则执行步骤307,反之,如果不一致,则跳转至步骤308。
307、若目标查询数据表中第三元组的参数值与第一元组的参数值一致,获取已缓存的第一数据查询结果;
本实施例中,如果目标查询数据表中第三元组的参数值与第一元组的参数值一致,则可以理解为采用第三元组参数值所获取的数据查询结果,与采用第一元组参数值所获取的数据查询结果也是相同的。
根据步骤304所描述的内容可知,已经根据第一元组的参数值进行子查询并获取第一数据查询结果,并在步骤305中缓存了该第一数据查询结果,于是可以直接调取第一数据查询结果。
308、若目标查询数据表中第三元组的参数值与第一元组的参数值不一致,根据第三元组的参数值获取第二数据查询结果;
本实施例中,如果目标查询数据表中第三元组的参数值与第一元组的参数值不一致,则可以理解为采用第三元组参数值所获取的数据查询结果,与采用第一元组参数值所获取的数据查询结果是不同的。于是将第三元组的参数值作为一个新的传入参数,然后传入迭代的子查询内部计算子查询的结果,即得到第二数据查询结果。
309、缓存第二数据查询结果并擦除第一数据查询结果。
本实施例中,数据查询装置在得到第二数据查询结果之后,将缓存该第二数据查询结果,并清除之前缓存的第一数据查询结果。
本申请实施例中,提供了一种数据查询的方法,在数据查询装置缓存第一数据查询结果之后,还可以继续获取目标查询数据表中的第三元组的参数值,其中,第三元组的参数值是在获取到第一元组的参数值之后得到的,进而第三元组的参数值与第一元组的参数值是否一致。若一致,则直接获取已缓存的第一数据查询结果,反之,若不一致,则根据第三元组的参数值获取第二数据查询结果,并缓存第二数据查询结果,并擦除第一数据查询结果。通过上述方式,一方面对于有参数重复的子查询仅计算一次,减少了计算量,从而提高查询效率。另一方面,只缓存一个数据查询结果,可以减少缓存的数据量,便于快速提取所需的数据查询结果,从而提升方案的实用性。
为便于理解,下面可以以一个具体应用场景对本申请中选择数据查询的过程进行详细描述,具体为:
首先定义稳定(stable)的子查询。对于同一个子查询,如果传入的参数相同,得到的子查询结果集合也相同,则称此子查询是stable的,不包含不稳定(volatile)函数的查询就是stable的,volatile函数即对于相同的输入参数,返回结果可能是不同的。对于stable 的子查询,可以通过将父查询按照传入参数进行排序。
请参阅图8,图8为本申请实施例中选择数据查询方法的一个流程示意图,首先接收数据查询请求,然后获取该数据查询请求对应的子查询估算代价值,如果子查询估算代价值大于或者等于预设门限,则选择图8左侧的(a)流程进行子查询,反之,如果子查询估算代价值小于预设门限,则选择图8右侧的(b)流程进行子查询。当父查询数据表中参数值重复值较少时,对于父查询每条元组而言,可以获取传入参数并传入子查询内部计算子查询的结果,最后返回查询结果集。
当父查询重复值较多时,首先对父查询按传入参数值进行排序。然后,对于父查询每条元组,需要检测是否与上一条元组的传入参数相同。若相同,则直接利用上一条元组子查询的结果进行条件的过滤;否则,此为一个新的传入参数,则需要传入迭代的子查询内部计算子查询的结果,清除之前的子查询缓存后缓存新的子查询结果。
对于传入参数重复值较多的情况,采用图8右侧的(b)流程可以明显节省子查询重复执行的次数,达到提高执行效率的目的。但对于传入参数重复值较少时,右侧的流程多出了排序的步骤,而减少的子查询计算次数不明显,故可能造成劣化。所以,需要通过代价估算选择是使用左侧的流程还是右侧的流程生成计划。
下面对本申请中的数据查询装置进行详细描述,请参阅图9,本申请实施例中的数据查询装置50包括:
接收模块501,用于接收数据查询请求,所述数据查询请求包含子查询以及所述子查询对应的父查询,所述子查询的执行依赖于所述父查询传入的多个参数值;
确定模块502,用于确定所述接收模块501接收的所述数据查询请求的子查询估算代价值,其中,所述子查询估算代价值指示对所述父查询传入的多个参数值排序后执行所述子查询的代价,所述子查询估算代价值与所述子查询对应的父查询传入的多个参数值的重复率相关;
构建模块503,用于若所述确定模块502确定的所述子查询估算代价值小于预设门限,则根据父查询传入的多个参数值构建父查询数据表,并对所述父查询数据表中的元组进行排序,以得到目标查询数据表,其中,所述父查询数据表包含所述多个参数值对应的多条元组;
第一获取模块504,用于若所述构建模块503构建的所述目标查询数据表中第一元组对应的参数值与第二元组对应的参数值不一致,则根据所述第一元组对应的参数值执行所述子查询以获取第一数据查询结果,其中,所述第一元组为按照所述排序与所述第二元组后相邻的元组。
本实施例中,接收模块501接收数据查询请求,所述数据查询请求包含子查询以及所述子查询对应的父查询,所述子查询的执行依赖于所述父查询传入的多个参数值,确定模块502确定所述接收模块501接收的所述数据查询请求的子查询估算代价值,其中,所述子查询估算代价值指示对所述父查询传入的多个参数值排序后执行所述子查询的代价,所述子查询估算代价值与所述子查询对应的父查询传入的多个参数值的重复率相关,若所述确定模块502确定的所述子查询估算代价值小于预设门限,则构建模块503根据父查询传入的多个参数值构建父查询数据表,并对所述父查询数据表中的元组进行排序,以得到目标查询数据表,其中,所述父查询数据表包含所述多个参数值对应的多条元组,若所述构建模块503构建的所述目标查询数据表中第一元组对应的参数值与第二元组对应的参数值不一致,则第一获取模块504根据所述第一元组对应的参数值执行所述子查询以获取第一数据查询结果,其中,所述第一元组为按照所述排序与所述第二元组后相邻的元组。
本申请实施例中,提供了一种数据查询装置,首先数据查询装置接收数据查询请求,该数据查询请求包含子查询以及子查询对应的父查询,子查询的执行依赖于所述父查询传入的多个参数值,然后确定数据查询请求的子查询估算代价值,子查询估算代价值指示对父查询传入的多个参数值排序后执行子查询的代价,子查询估算代价值与子查询对应的父查询传入的多个参数值的重复率相关,若子查询估算代价值小于预设门限,则数据查询装置会根据父查询传入的多个参数值构建父查询数据表,并对父查询数据表中的元组进行排序,以得到目标查询数据表,其中,父查询数据表包含多个参数值对应的多条元组,若所述目标查询数据表中第一元组对应的参数值与第二元组对应的参数值不一致,则根据第一元组对应的参数值执行子查询以获取第一数据查询结果,其中,第一元组为按照排序与第二元组后相邻的元组。通过上述方式,只有在子查询估算代价值小于预设门限的情况下,才对父查询传入的参数值进行排序,这样可以使得执行执行排序的开销小于复用参数值的开销。针对排序后得到的目标查询数据表,若第一元组的参数值与第二元组的参数值不一致,则进而可获取第一数据查询结果,以此避免使用同样的参数进行重复计算,从而提升查询速度,降低执行开销,有利于性能的提升。
可选地,在上述图9所对应的实施例的基础上,请参阅图10,本申请实施例提供的数据查询装置50的另一实施例中,所述数据查询装置50还包括:
第二获取模块505,用于若所述构建模块503构建的所述子查询估算代价值大于所述预设门限,则根据父查询数据表获取数据查询结果。
其次,本申请实施例中,在数据查询装置判断得到子查询估算代价值大于预设门限时,可以直接通过父查询数据表来获取相应的数据查询结果。通过上述方式,若子查询估算代价值大于预设门限,则说明对父查询数据表进行排序的开销较大,从而在这种情况下选择不对该父查询数据包进行排序,而是直接获取数据查询结果,由于提升方案的实用性和灵活性。
可选地,在上述图9所对应的实施例的基础上,请参阅图11,本申请实施例提供的数据查询装置50的另一实施例中,
所述确定模块502包括:
确定单元5021,用于根据所述父查询数据表中的元组数目以及所述父查询传入的所述多个参数值中非重复的参数值的数目确定所述子查询估算代价值。
其次,本申请实施例中,数据查询装置可以根据父查询数据表中的元组数目以及父查询传入的多个参数值中非重复的参数值的数目来确定子查询估算代价值。通过上述方式,可以提升计算子查询估算代价值的合理性,同时,计算得到的子查询估算代价值考虑到不同参数的影响,因此具有更强的可靠性。
可选地,在上述图11所对应的实施例的基础上,请参阅图12,本申请实施例提供的数据查询装置50的另一实施例中,
确定单元5021包括:
计算子单元50211,用于根据所述元组数目、所述非重复的参数值的数目以及子查询执行代价值,计算子查询节省代价值,其中,所述子查询执行代价值与子查询数据表中的元组数目具有关联关系,所述子查询执行代价值指示执行一次子查询的代价,所述子查询数据表对应于所述目标查询数据表中的一条元组;
确定子单元50212,用于根据父查询排序代价值与所述计算子单元50211计算得到的所述子查询节省代价值之间的差值确定所述子查询估算代价值,其中,所述父查询排序代价值与所述父查询数据表中的元组数目具有关联关系,所述父查询排序代价值指示对所述父查询数据表进行一次排序操作的代价。
再次,本申请实施例中,介绍了计算子查询估算代价值的具体方式,即先根据元组数目、非重复的参数值的数目以及子查询执行代价值,计算子查询节省代价值,再利用父查询排序代价值与该子查询节省代价值之间的差值确定子查询估算代价值。通过上述方式,可以进一步提升计算子查询估算代价值的合理性,同时,提供了一种计算方式,从而使得方案更具有更强的可行性和实用性。
可选地,在上述图9至12中任一个所对应的实施例的基础上,请参阅图13,本申请实施例提供的数据查询装置50的另一实施例中,所述数据查询装置50还包括:
第一缓存模块506,用于缓存所述第一数据查询结果。
进一步地,本申请实施例中,在数据查询装置可以进一步缓存第一数据查询结果。通过上述方式,缓存已经得到的第一数据查询结果便于后续直接进行提取,无需重复采用相同的参数值获取数据查询结果,从而提升查询速度,降低执行开销,有利于性能的提升。
可选地,在上述图13所对应的实施例的基础上,请参阅图14,本申请实施例提供的数据查询装置50的另一实施例中,所述数据查询装置50还包括:
判断模块507,用于判断所述目标查询数据表中第三元组的参数值与第一元组的参数值是否一致,若一致,则获取已缓存的所述第一数据查询结果,其中,所述第三元组的参数值是在获取到所述第一元组的参数值之后得到的。
更进一步地,本申请实施例中,数据查询装置还可以获取目标查询数据表中第三元组的参数值,其中,第三元组的参数值是在获取到第一元组的参数值之后得到的,若第三元组的参数值与第一元组的参数值一致,则可以直接获取已缓存的第一数据查询结果即可。通过上述方式,对于有参数重复的子查询仅计算一次,减少了计算量,从而提高查询效率。
可选地,在上述图14所对应的实施例的基础上,请参阅图15,本申请实施例提供的数据查询装置50的另一实施例中,所述数据查询装置50还包括:
第三获取模块508,用于若所述目标查询数据表中第三元组的参数值与第一元组的参数值不一致,则根据所述第三元组的参数值获取第二数据查询结果;
第二缓存模块509,用于缓存所述第三获取模块508获取的所述第二数据查询结果,并擦除所述第一数据查询结果。
再进一步地,本申请实施例中,若目标查询数据表中第三元组的参数值与第一元组的参数值不一致,则数据查询装置还可以根据第三元组的参数值获取第二数据查询结果,在得到第二数据查询结果之后,会擦除原本缓存的第一数据查询结果。通过上述方式,可以只缓存一个数据查询结果,一方面可以减少缓存的数据量,另一方面,便于快速提取所需的数据查询结果,从而提升方案的实用性。
图16示出了本申请一个实施例提供的数据查询的装置的结构,包括至少一个处理器 602(例如CPU),至少一个网络接口603或者其他通信接口,存储器604。可选地,还可以接收器605和发送器606。处理器602用于执行存储器604中存储的可执行模块,例如计算机程序。存储器604可能包含高速随机存取存储器RAM,也可能还包括非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。通过至少一个网络接口603(可以是有线或者无线)实现与至少一个其他网元之间的通信连接。接收器605和发送器606 用于传输各种信号或信息。
在一些实施方式中,存储器604存储了程序6041,程序6041可以被处理器602执行,用于执行前述本申请实施例的数据查询的方法。
图17示出了根据本申请实施例的数据库系统700的示意性框图。如图17所示,该数据库系统700包括前述本申请实施例的数据查询装置50和数据库710。该数据库系统700 可以执行前述本申请实施例的数据查询的方法,在数据库710中进行查询。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM, Read-OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。
Claims (15)
1.一种数据查询的方法,其特征在于,包括:
接收数据查询请求,所述数据查询请求包含子查询以及所述子查询对应的父查询,所述子查询的执行依赖于所述父查询传入的多个参数值;
根据父查询数据表中的元组数目以及所述父查询传入的所述多个参数值中非重复的参数值的数目确定所述子查询估算代价值,其中,所述子查询估算代价值指示对所述父查询传入的所述多个参数值排序后执行所述子查询的代价,所述子查询估算代价值与所述父查询传入的所述多个参数值的重复率相关,所述父查询数据表是根据所述父查询传入的所述多个参数值构建的,所述父查询数据表包含所述多个参数值对应的多条元组;
若所述子查询估算代价值小于预设门限,则对所述父查询数据表中的元组进行排序,以得到目标查询数据表;
若所述目标查询数据表中第一元组对应的参数值与第二元组对应的参数值不一致,则根据所述第一元组对应的参数值执行所述子查询以获取第一数据查询结果,其中,所述第一元组为按照所述排序与所述第二元组后相邻的元组。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
若所述子查询估算代价值大于所述预设门限,则根据所述父查询数据表获取数据查询结果。
3.根据权利要求1所述的方法,其特征在于,所述根据所述父查询数据表中的元组数目以及所述父查询传入的所述多个参数值中非重复的参数值的数目确定所述子查询估算代价值,包括:
根据所述元组数目、所述非重复的参数值的数目以及子查询执行代价值,计算子查询节省代价值,其中,所述子查询执行代价值与子查询数据表中的元组数目具有关联关系,所述子查询执行代价值指示执行一次子查询的代价,所述子查询数据表对应于所述目标查询数据表中的一条元组;
根据父查询排序代价值与所述子查询节省代价值之间的差值确定所述子查询估算代价值,其中,所述父查询排序代价值与所述父查询数据表中的元组数目具有关联关系,所述父查询排序代价值指示对所述父查询数据表进行一次排序操作的代价。
4.根据权利要求1至3中任一项所述的方法,其特征在于,所述方法还包括:
缓存所述第一数据查询结果。
5.根据权利要求4所述的方法,其特征在于,所述方法还包括:
判断所述目标查询数据表中第三元组的参数值与第一元组的参数值是否一致,若一致,则获取已缓存的所述第一数据查询结果,其中,所述第三元组的参数值是在获取到所述第一元组的参数值之后得到的。
6.根据权利要求5所述的方法,其特征在于,所述方法还包括:
若所述目标查询数据表中第三元组的参数值与第一元组的参数值不一致,则根据所述第三元组的参数值获取第二数据查询结果;
缓存所述第二数据查询结果,并擦除所述第一数据查询结果。
7.一种数据查询装置,其特征在于,包括:
接收模块,用于接收数据查询请求,所述数据查询请求包含子查询以及所述子查询对应的父查询,所述子查询的执行依赖于所述父查询传入的多个参数值;
确定模块,用于根据父查询数据表中的元组数目以及所述接收模块接收的所述父查询传入的所述多个参数值中非重复的参数值的数目确定所述子查询估算代价值,其中,所述子查询估算代价值指示对所述父查询传入的所述多个参数值排序后执行所述子查询的代价,所述子查询估算代价值与所述父查询传入的所述多个参数值的重复率相关;
构建模块,用于若所述确定模块确定的所述子查询估算代价值小于预设门限,则对所述父查询数据表中的元组进行排序,以得到目标查询数据表,其中,所述父查询数据表包含所述多个参数值对应的多条元组;
第一获取模块,用于若所述构建模块构建的所述目标查询数据表中第一元组对应的参数值与第二元组对应的参数值不一致,则根据所述第一元组对应的参数值执行所述子查询以获取第一数据查询结果,其中,所述第一元组为按照所述排序与所述第二元组后相邻的元组。
8.根据权利要求7所述的数据查询装置,其特征在于,所述数据查询装置还包括:
第二获取模块,用于若所述构建模块构建的所述子查询估算代价值大于所述预设门限,则根据父查询数据表获取数据查询结果。
9.根据权利要求7所述的数据查询装置,其特征在于,所述确定单元包括:
计算子单元,用于根据所述元组数目、所述非重复的参数值的数目以及子查询执行代价值,计算子查询节省代价值,其中,所述子查询执行代价值与子查询数据表中的元组数目具有关联关系,所述子查询执行代价值指示执行一次子查询的代价,所述子查询数据表对应于所述目标查询数据表中的一条元组;
确定子单元,用于根据父查询排序代价值与所述计算子单元计算得到的所述子查询节省代价值之间的差值确定所述子查询估算代价值,其中,所述父查询排序代价值与所述父查询数据表中的元组数目具有关联关系,所述父查询排序代价值指示对所述父查询数据表进行一次排序操作的代价。
10.根据权利要求7至9中任一项所述的数据查询装置,其特征在于,所述数据查询装置还包括:
第一缓存模块,用于缓存所述第一数据查询结果。
11.根据权利要求10所述的数据查询装置,其特征在于,所述数据查询装置还包括:
判断模块,用于判断所述目标查询数据表中第三元组的参数值与第一元组的参数值是否一致,若一致,则获取已缓存的所述第一数据查询结果,其中,所述第三元组的参数值是在获取到所述第一元组的参数值之后得到的。
12.根据权利要求11所述的数据查询装置,其特征在于,所述数据查询装置还包括:
第三获取模块,用于若所述目标查询数据表中第三元组的参数值与第一元组的参数值不一致,则根据所述第三元组的参数值获取第二数据查询结果;
第二缓存模块,用于缓存所述第三获取模块获取的所述第二数据查询结果,并擦除所述第一数据查询结果。
13.一种数据查询装置,其特征在于,所述数据查询装置包括至少一个处理器、存储器及存储在所述存储器上并可被所述至少一个处理器执行的指令,其特征在于,所述至少一个处理器执行所述指令,以实现权利要求1至6中任一项所述的方法的步骤。
14.一种计算机可读存储介质,包括指令,当其在计算机上运行时,使得计算机执行如权利要求1-6所述的方法。
15.一种数据库系统,其特征在于,包括根据权利要求7至12中任一项所述的数据查询装置和数据库。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710527453.3A CN109241093B (zh) | 2017-06-30 | 2017-06-30 | 一种数据查询的方法、相关装置及数据库系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710527453.3A CN109241093B (zh) | 2017-06-30 | 2017-06-30 | 一种数据查询的方法、相关装置及数据库系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109241093A CN109241093A (zh) | 2019-01-18 |
CN109241093B true CN109241093B (zh) | 2021-06-08 |
Family
ID=65083166
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710527453.3A Active CN109241093B (zh) | 2017-06-30 | 2017-06-30 | 一种数据查询的方法、相关装置及数据库系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109241093B (zh) |
Families Citing this family (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111831425A (zh) * | 2019-04-18 | 2020-10-27 | 阿里巴巴集团控股有限公司 | 一种数据处理方法、装置及设备 |
CN110362598B (zh) * | 2019-06-27 | 2022-02-08 | 东软集团股份有限公司 | 数据查询的方法、装置、存储介质及电子设备 |
CN110928875B (zh) * | 2019-10-16 | 2021-04-16 | 中科驭数(北京)科技有限公司 | 关系型数据库管理系统中的元组排序方法、查询方法及装置 |
CN111190897B (zh) * | 2019-11-07 | 2023-04-18 | 腾讯科技(深圳)有限公司 | 信息处理方法、装置、存储介质及服务器 |
CN113111058B (zh) * | 2020-01-10 | 2023-03-28 | 华为技术有限公司 | 一种数据库的处理方法和装置 |
CN111666279B (zh) * | 2020-04-14 | 2022-04-29 | 阿里巴巴集团控股有限公司 | 查询数据处理方法、装置、电子设备及计算机存储介质 |
CN111597209B (zh) * | 2020-04-30 | 2023-11-14 | 清华大学 | 一种数据库物化视图构建系统、方法以及系统创建方法 |
CN113297244B (zh) * | 2020-05-29 | 2022-05-06 | 阿里巴巴集团控股有限公司 | 数据库操作方法、装置、设备及存储介质 |
CN114637759B (zh) * | 2020-12-16 | 2023-04-18 | 金篆信科有限责任公司 | 数据查询方法、电子设备、存储介质 |
CN114817310A (zh) * | 2021-01-27 | 2022-07-29 | 华为技术有限公司 | 一种数据查询方法、装置、设备及存储介质 |
CN113468169B (zh) * | 2021-06-02 | 2022-09-09 | 中科驭数(北京)科技有限公司 | 硬件数据库查询方法、数据库系统查询方法及装置 |
CN113656437B (zh) * | 2021-07-02 | 2023-10-03 | 阿里巴巴新加坡控股有限公司 | 用于预测参照执行代价稳定度的模型构建方法 |
CN114328614B (zh) * | 2022-03-03 | 2022-07-05 | 阿里巴巴(中国)有限公司 | 查询计划选择系统、方法、电子设备及介质 |
CN114416784B (zh) * | 2022-03-28 | 2022-07-08 | 北京奥星贝斯科技有限公司 | 处理数据库查询语句的方法、装置及原生分布式数据库 |
CN117056361A (zh) * | 2023-07-03 | 2023-11-14 | 杭州拓数派科技发展有限公司 | 一种分布式数据库的数据查询方法及装置 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102968420A (zh) * | 2011-08-31 | 2013-03-13 | 国际商业机器公司 | 数据库查询的方法和系统 |
CN103064955A (zh) * | 2012-12-28 | 2013-04-24 | 华为技术有限公司 | 查询规划方法及装置 |
CN103324724A (zh) * | 2013-06-26 | 2013-09-25 | 华为技术有限公司 | 数据处理方法及装置 |
CN104765731A (zh) * | 2014-01-02 | 2015-07-08 | 国际商业机器公司 | 数据库查询优化方法和设备 |
CN105243068A (zh) * | 2014-07-09 | 2016-01-13 | 华为技术有限公司 | 数据库系统的查询方法、服务器和能耗测试系统 |
CN105677812A (zh) * | 2015-12-31 | 2016-06-15 | 华为技术有限公司 | 一种数据查询方法及数据查询装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10152511B2 (en) * | 2012-09-14 | 2018-12-11 | Salesforce.Com, Inc. | Techniques for optimization of inner queries |
-
2017
- 2017-06-30 CN CN201710527453.3A patent/CN109241093B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102968420A (zh) * | 2011-08-31 | 2013-03-13 | 国际商业机器公司 | 数据库查询的方法和系统 |
CN103064955A (zh) * | 2012-12-28 | 2013-04-24 | 华为技术有限公司 | 查询规划方法及装置 |
CN103324724A (zh) * | 2013-06-26 | 2013-09-25 | 华为技术有限公司 | 数据处理方法及装置 |
CN104765731A (zh) * | 2014-01-02 | 2015-07-08 | 国际商业机器公司 | 数据库查询优化方法和设备 |
CN105243068A (zh) * | 2014-07-09 | 2016-01-13 | 华为技术有限公司 | 数据库系统的查询方法、服务器和能耗测试系统 |
CN105677812A (zh) * | 2015-12-31 | 2016-06-15 | 华为技术有限公司 | 一种数据查询方法及数据查询装置 |
Non-Patent Citations (3)
Title |
---|
Multiple-query optimization;Timos K.sellis;《ACM》;19880331;第13卷(第1期);第23-52页 * |
Oracle数据库的SQL语句优化;钟小权等;《计算机与现代化》;20110315(第03期);第124-126页 * |
关于SQL查询优化的研究;刘丹;《才智》;20100415(第11期);第47页 * |
Also Published As
Publication number | Publication date |
---|---|
CN109241093A (zh) | 2019-01-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109241093B (zh) | 一种数据查询的方法、相关装置及数据库系统 | |
US11157478B2 (en) | Technique of comprehensively support autonomous JSON document object (AJD) cloud service | |
JP6617117B2 (ja) | 半構造データのためのスケーラブルな分析プラットフォーム | |
US10073885B2 (en) | Optimizer statistics and cost model for in-memory tables | |
US10642831B2 (en) | Static data caching for queries with a clause that requires multiple iterations to execute | |
US8732163B2 (en) | Query optimization with memory I/O awareness | |
EP2350868B1 (en) | Efficient large-scale filtering and/or sorting for querying of column based data encoded structures | |
US9990398B2 (en) | Inferring dimensional metadata from content of a query | |
EP2746970B1 (en) | Timeline index for managing temporal data | |
US20150088919A1 (en) | Transforming a query to reuse stored data | |
CN108536692B (zh) | 一种执行计划的生成方法、装置及数据库服务器 | |
CN108804473B (zh) | 数据查询的方法、装置和数据库系统 | |
US11797483B2 (en) | Data pruning based on metadata | |
US20220179859A1 (en) | Duplication elimination in depth based searches for distributed systems | |
Giannakouris et al. | MuSQLE: Distributed SQL query execution over multiple engine environments | |
CN108509453B (zh) | 一种信息处理方法及装置 | |
Theocharidis et al. | SRX: efficient management of spatial RDF data | |
Ho et al. | Data partition optimization for column-family NoSQL databases | |
US20200364226A1 (en) | Methods and devices for dynamic filter pushdown for massive parallel processing databases on cloud | |
CN114168620B (zh) | 执行计划的处理方法及装置 | |
CN108932258B (zh) | 数据索引处理方法及装置 | |
US20170031909A1 (en) | Locality-sensitive hashing for algebraic expressions | |
CN117290403A (zh) | 用于查询计划成本估计的运行时统计反馈 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |