掌桥专利:专业的专利平台
掌桥专利
首页

数据库查询语句的优化方法、存储介质与计算机设备

文献发布时间:2023-06-19 19:14:59


数据库查询语句的优化方法、存储介质与计算机设备

技术领域

本发明涉及数据库技术,特别是涉及一种数据库查询语句的优化方法、存储介质与计算机设备。

背景技术

关系型数据库一般采用结构化查询语言(Structured Query Language,简称SQL)进行查询,对一个给定的查询语句,通常存在多种可能的策略,查询优化就是从中找出最有效的查询执行计划的处理过程。针对同一个查询语句,不同的执行计划的代价上可能存在非常大的区别。数据库系统的优化器的任务就是生成优选的查询执行。

查询结果中可能会出现重复值,在需要仅仅列出不重复的结果时,可以采用DISTINCT关键词,用于返回唯一不同的。对于形如select distinct…的SQL语句,优化器在处理时,无论是否存在重复元组,都会对结果进行去重操作。

在查询结果本身不具有重复值的情况下,上述处理DISTINCT关键词的方式会增加资源开销,导致查询效率下降。

发明内容

本发明的一个目的是要至少解决上述任一方面技术问题的数据库查询语句的优化方法、存储介质与计算机设备。

本发明一个进一步的目的是提高具有DISTINCT关键词的查询语句的查询效率。

本发明另一进一步的目的是优化消除关键词DISTINCT的规则。

特别地,本发明提供了一种数据库查询语句的优化方法,其包括:

获取数据库查询语句,并确定数据库查询语句是否包含去除重复值的关键词DISTINCT;

在数据库查询语句包含关键词DISTINCT的情况下,判断数据库查询语句指定的数据表是否全部满足预设的限定表规则;

若是,删除数据库查询语句中的关键词DISTINCT,得到消除优化后的查询语句;

按照消除优化后的查询语句执行查询。

可选地,判断查询语句指定的数据表是否全部满足预设的限定表规则的步骤包括:

确定数据表中数据库查询语句涉及数据列的集合;

对数据列的集合逐列判断是否同时满足非空性条件以及唯一性条件;

若满足,则判定查询语句指定的数据表属于限定表,并且认定限定表全部满足预设的限定表规则。

可选地,在对数据列的集合逐列判断是否同时满足非空性条件以及唯一性条件的步骤之后还包括:

将数据列不能同时满足非空性条件以及唯一性条件的数据表作为待分析表;

判断待分析表是否与任一限定表存在唯一连接关系;

若是,则认定待分析表也属于限定表。

可选地,判断待分析表是否与任一限定表存在唯一连接关系的步骤包括:

待分析表与限定表中满足非空性条件和唯一性条件的列集合中的一列存在连接谓词关系且满足待分析表的某一列数据与列集合中的一列数据具有等值关系。

可选地,非空性条件包括:

数据列上存在非空约束或者主键约束;或者

数据列上存在设置非空的谓词且之间使用逻辑连词and进行连接;或者

数据列经过过滤谓词或者连接谓词进行筛选并且之间使用逻辑连词and进行连接。

可选地,唯一性条件包括:

数据列上存在唯一约束或者主键约束;或者

数据列上存在唯一索引;

数据列与另一满足预设条件的数据列的组合具有唯一性,满足预设条件的数据列存在等于常数的谓词并且之间使用逻辑连词and进行连接。

可选地,唯一性条件还包括:

数据列为具有DISTINCT查询子句的视图或者子查询的全部列;或者

数据列为视图或者子查询中GROUP BY子句的唯一列。

可选地,判断数据库查询语句指定的数据表是否全部满足预设的限定表规则的步骤之后还包括:

如果数据库查询语句指定的数据表不能全部满足预设的限定表规则,则直接执行包含去除重复值的关键词DISTINCT的数据库查询语句。

根据本发明的另一个方面,还提供了一种机器可读存储介质,其上存储有机器可执行程序,机器可执行程序被处理器执行时实现上述任一种的数据库查询语句的优化方法。

根据本发明的又一个方面,还提供了一种计算机设备,包括存储器、处理器及存储在存储器上并在处理器上运行的机器可执行程序,并且处理器执行机器可执行程序时实现上述任一种的数据库查询语句的优化方法。

本发明的数据库查询语句的优化方法,对于包含关键词DISTINCT的数据库查询语句,其指定的数据表全部满足预设的限定表规则的规则下,直接去除数据库查询语句中的关键词DISTINCT,节省了进行去重处理耗费的资源,提高了查询处理效率。限定表规则通过对数据表的非空唯一特性进行设置,保证删除DISTINCT的情况下,查询结果不会出现重复项,保证优化前后的一致性。

进一步地,本发明的数据库查询语句的优化方法,针对非空性条件以及唯一性条件(特别是视图和子查询的非空性条件以及唯一性条件)分别进行了创造性的总结,确保查询结果不重复。

根据下文结合附图对本发明具体实施例的详细描述,本领域技术人员将会更加明了本发明的上述以及其他目的、优点和特征。

附图说明

后文将参照附图以示例性而非限制性的方式详细描述本发明的一些具体实施例。附图中相同的附图标记标示了相同或类似的部件或部分。本领域技术人员应该理解,这些附图未必是按比例绘制的。附图中:

图1是根据本发明一个实施例的数据库查询语句的优化方法的示意图;

图2为优化前的数据库查询语句的代数形式示意图;

图3为使用根据本发明一个实施例的数据库查询语句的优化方法消除优化后的查询语句的代数形式;

图4是根据本发明一个实施例的数据库查询语句的优化方法的一种可选执行流程图;

图5是根据本发明一个实施例的机器可读存储介质的示意图;以及

图6是根据本发明一个实施例的计算机设备的示意图。

具体实施方式

图1是根据本发明一个实施例的数据库查询语句的优化方法的示意图,该数据库查询语句的优化方法一般性地可以包括:

步骤S101,获取数据库查询语句,并确定数据库查询语句是否包含去除重复值的关键词DISTINCT;

步骤S102,在数据库查询语句包含关键词DISTINCT的情况下,判断数据库查询语句指定的数据表是否全部满足预设的限定表规则。

限定表规则按照数据表中数据列的唯一性进行配置,也即根据确保查询结果不包含重复值的情况进行设置。判断数据库查询语句指定的数据表是否全部满足预设的限定表规则的一种可选方式为:确定数据表中数据库查询语句涉及数据列的集合;对数据列的集合逐列判断是否同时满足非空性条件以及唯一性条件;若满足,则判定查询语句指定的数据表属于限定表,并且认定限定表全部满足预设的限定表规则。

上述非空性条件可以包括以下任意一种:

非空性条件(1):数据列上存在非空约束(NOT NULL)或者主键约束(PRIMARY KEY约束)。

非空性条件(2):数据列上存在设置非空的谓词(IS NOT NULL谓词)且之间使用逻辑连词and进行连接。也即对于表T中的列集合s(s取值为c

非空性条件(3):数据列经过过滤谓词(例如大于某常数)或者连接谓词(连接条件)进行筛选并且之间使用逻辑连词and进行连接。也即对于表T中的列集合s(s取值为c

唯一性条件可以包括以下任意一种:

唯一性条件(1):数据列上存在唯一约束(Unique)或者主键约束(PRIMARY KEY约束)。

唯一性条件(2):数据列上存在唯一索引(Unique索引);

唯一性条件(3):数据列与另一满足预设条件的数据列的组合具有唯一性,满足预设条件的数据列存在等于常数的谓词并且之间使用逻辑连词and进行连接。例如对于表T中的列集合s(s取值为c

在数据表T为视图或者子查询的情况下,唯一性条件还可以包括:数据列为具有DISTINCT查询子句的视图或者子查询的全部列;或者数据列为视图或者子查询中GROUP BY子句的唯一列。也就是说唯一性条件还可以包括:唯一性条件(4)对于视图T,该视图的SELECT DISTINCT子句中,只有T.s这一个列集合;唯一性条件(5)对于子查询T,该子查询的SELECT DISTINCT子句中,只有T.s这一个列集合;唯一性条件(6)对于视图T,视图中存在目标列T.s,并且T.s是视图的GROUP BY子句中的唯一列;唯一性条件(7)对于子查询T,子查询中存在目标列T.s,并且T.s是子查询的GROUP BY子句中的唯一列。

另外对于数据列不能同时满足非空性条件以及唯一性条件的数据表,还可以进行进一步的规则判断,也就是说在对数据列的集合逐列判断是否同时满足非空性条件以及唯一性条件的步骤之后还可以包括:将数据列不能同时满足非空性条件以及唯一性条件的数据表作为待分析表;判断待分析表是否与任一限定表存在唯一连接关系;若是,则认定待分析表也属于限定表。其中判断待分析表是否与任一限定表存在唯一连接关系的过程可以为:待分析表与限定表中满足非空性条件和唯一性条件的列集合中的一列存在连接谓词关系且满足待分析表的某一列数据与列集合中的一列数据具有等值关系。

例如表Tx与表Ty的一个具有“一性的列集合s(c

总而言之,限定表Tx的一个认定条件为:Tx中存在一个具有“非空唯一”特性的列集合Tx.s,且在select distinct字句所有的列均在列集合Tx.s内。

步骤S103,如果数据库查询语句指定的数据表全部满足预设的限定表规则,删除数据库查询语句中的关键词DISTINCT,得到消除优化后的查询语句。

步骤S104,按照消除优化后的查询语句执行查询。如果数据库查询语句指定的数据表不能全部满足预设的限定表规则,则直接执行包含去除重复值的关键词DISTINCT的数据库查询语句,也即对于不符合消除DISTINCT条件的查询在按照DISTINCT的处理过程进行处理。

上述实施例的方法对于包含关键词DISTINCT的数据库查询语句,其指定的数据表全部满足预设的限定表规则的规则下,直接去除数据库查询语句中的关键词DISTINCT,节省了进行去重处理耗费的资源,提高了查询处理效率。

以下针对上述实施例的方法中使用的规则进一步解释如下:

形如select distinct…的SQL语句,当查询中所有涉及的表全部术语限定表的情况下,可确定SQL语句结果集中的元组都是不重复的,可以进行distinct的消除。

针对查询语句:select distinct a,b,c from t1。经过消除优化后的查询语句变更为:select a,b,c from t1。图2、图3分别为优化前的数据库查询语句的代数形式以及消除优化后的查询语句的代数形式。优化前的数据库查询语句处理过程包括:步骤S201,对表T进行选择σ(T);步骤S202,对表T进行投影Π(T),步骤S203,执行去重deduplication;消除优化后的查询语句处理过程包括:步骤S201,对表T进行选择σ(T);步骤S202,对表T进行投影Π(T),直接得到结果。从而取消了步骤S203的去重过程,节省了处理过程。

限定表Tx需要满足以下两个条件中的至少一个条件:

限定表条件(1):Tx中存在一个具有非空唯一特性的列集合Tx.s,且s中的所有列出现在select distinct字句中

限定表条件(2):存在另一个限定表Ty,且Ty和Tx之间存在唯一连接关系。

限定表条件(2)中出现的唯一连接是指:表Tx与表Ty的一个具有“一性的列集合s(c1,c2…cn,n>=1)存在连接谓词满足Tx.a=Ty.c1 and Tx.b=Ty.c2and…and Tx.n=Ty.cn,那么称表Tx与表Ty之间存在“唯一连接”关系。需要额外说明的是“唯一连接”关系并不可逆,仅可以认定表Tx与表Ty之间存在唯一连接关系,反之则不一定成立。

限定表条件(1)中出现的非空唯一特性要求表T的列集合s同时满足非空性条件和唯一性条件。

非空性条件可以包括:

非空性条件(1):数据列上存在非空约束(NOT NULL)或者主键约束(PRIMARY KEY约束)。

非空性条件(2):数据列上存在设置非空的谓词(IS NOT NULL谓词)且之间使用逻辑连词and进行连接。也即对于表T中的列集合s(s取值为c1,c2…cn,n>=1),非空性条件(2)为T.c1 is not null and T.c2 is not null and…and T.cn is not null。

非空性条件(3):数据列经过过滤谓词(例如大于某常数)或者连接谓词(连接条件)进行筛选并且之间使用逻辑连词and进行连接。也即对于表T中的列集合s(s取值为c1,c2…cn,n>=1),非空性条件(3)为T.c1>5and T.c2=R.yand…and T.cn

当满足上述非空性条件(1)、非空性条件(2)、非空性条件(3)中的任一项时,则认为具有唯一性。

唯一性条件可以包括:

唯一性条件(1):数据列上存在唯一约束(Unique)或者主键约束(PRIMARY KEY约束)。

唯一性条件(2):数据列上存在唯一索引(Unique索引);

唯一性条件(3):数据列与另一满足预设条件的数据列的组合具有唯一性,满足预设条件的数据列存在等于常数的谓词并且之间使用逻辑连词and进行连接。例如对于表T中的列集合s(s取值为c1,c2…cn,n>=1),存在另一个列集合s1(x1,x2…xn,n>=1),(T.s,T.s1)具有唯一性,且s1中的每一列在查询中存在等于常数的谓词(=constant),且它们之间为and关系,示例为T.x1=5 and T.x2=10 and…and T.xn=20。上述5、10、20为示例的常数。

唯一性条件(4)对于视图T,该视图的SELECT DISTINCT子句中,只有T.s这一个列集合;

唯一性条件(5)对于子查询T,该子查询的SELECT DISTINCT子句中,只有T.s这一个列集合;

唯一性条件(6)对于视图T,视图中存在目标列T.s,并且T.s是视图的GROUP BY子句中的唯一列;

唯一性条件(7)对于子查询T,子查询中存在目标列T.s,并且T.s是子查询的GROUPBY子句中的唯一列。

当满足上述唯一性条件(1)~(7)中的任一项时,则认为具有唯一性。

图4是根据本发明一个实施例的数据库查询语句的优化方法的一种可选执行流程图,其示出了使用上述条件的一种执行流程。该执行流程包括:

步骤S401,获取具有select distinct……形式的数据库查询语句query;

步骤S402,从select distinct……的语句中找出所有存在非空唯一列集合的表,加入第一表集合set1;

步骤S403,判断Set1是否为空;

步骤S404,Query中不属于Set1的其他表加入待分析表集合set2;

步骤S405,判断Set2是否为空,也即判断是否所有表均属于set1;

步骤S406,Set2中每个表Tx,如果存在Set1中的某一表Ty满足Ty与Tx存在唯一连接,则将Tx移动至set1中;

步骤S407,判断Set2中的表是否被移动;

步骤S408,在set1为空的情况下(也即不存在非空唯一性的列集合的情况下),或者在set2中的表未被移动的情况下(也即set2中未被清空的情况下),直接执行selectdistinct……形式的查询语句query。在set2为空,也即所有表均属于set1的情况下,执行移除distinct后的优化语句。

步骤S410,在在set2为空,也即所有表均属于set1的情况下,移除query中的distinct。

通过上述步骤可以实现对上述特性的判定,通过两个集合set1和set2实现了非空唯一的列集合以及具有唯一连接性的限定表的判断,从而准确地判断出移除query中的distinct的情况,执行流程简单高效。发明人对上述实施例的方法进行了实际测试,测试结果表明本方案后,在满足该条逻辑优化规则的场景下,性能得到了极大的提升。

一个实际的测试场景为:创建表zl:create table zl(id int primary key,nametext);也即创建具有主键约束的表zl,在该表zl插入100万行数据后,针对语句query:select distinct*from zl;由于存在主键约束,结果集本来就不存在重复元组,distinct消除前后的结果对比为:执行时间从优化前的643ms变为优化后的103ms。

另外,对其他具有上述其他判断条件的表,经过实际测试优化前后执行时间也有大幅缩短。

本实施例还提供了一种机器可读存储介质和计算机设备。图5是根据本发明一个实施例的机器可读存储介质50的示意图,图6是根据本发明一个实施例的计算机设备60的示意图。

机器可读存储介质50其上存储有机器可执行程序51,机器可执行程序51被处理器执行时实现上述任一实施例的数据库查询语句的优化方法。

计算机设备60可以包括存储器620、处理器610及存储在存储器620上并在处理器610上运行的机器可执行程序51,并且处理器610执行机器可执行程序51时实现上述任一实施例的数据库查询语句的优化方法。

需要说明的是,在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何机器可读存储介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。

就本实施例的描述而言,机器可读存储介质50可以是任何可以包含、存储、通信、传播或传输程序以供指令执行系统、装置或设备或结合这些指令执行系统、装置或设备而使用的装置。计算机可读介质的更具体的示例(非穷尽性列表)包括以下:具有一个或多个布线的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(RAM),只读存储器(ROM),可擦除可编辑只读存储器(EPROM或闪速存储器),光纤装置,以及便携式光盘只读存储器(CDROM)。另外,计算机可读介质50甚至可以是可在其上打印所述程序的纸或其他合适的介质,因为可以例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理来以电子方式获得所述程序,然后将其存储在计算机存储器中。

应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。

计算机设备60可以是例如服务器、台式计算机、笔记本式计算机、平板计算机或智能手机。在一些示例中,计算机设备60可以是云计算节点。计算机设备60可以在由计算机系统执行的计算机系统可执行指令(诸如程序模块)的一般语境下描述。通常,程序模块可以包括执行特定的任务或者实现特定的抽象数据类型的例程、程序、目标程序、组件、逻辑、数据结构等。计算机设备60可以在通过通信网络链接的远程处理设备执行任务的分布式云计算环境中实施。在分布式云计算环境中,程序模块可以位于包括存储设备的本地或远程计算系统存储介质上。

计算机设备60可以包括适于执行存储的指令的处理器610、在操作期间为所述指令的操作提供临时存储空间的存储器620。处理器610可以是单核处理器、多核处理器、计算集群或任何数量的其他配置。存储器620可以包括随机存取存储器(RAM)、只读存储器、闪存或任何其他合适的存储系统。

处理器610可以通过系统互连(例如PCI、PCI-Express等)连接到适于将计算机设备60连接到一个或多个I/O设备(输入/输出设备)的I/O接口(输入/输出接口)。I/O设备可以包括例如键盘和指示设备,其中指示设备可以包括触摸板或触摸屏等等。I/O设备可以是计算机设备60的内置组件,或者可以是外部连接到计算设备的设备。

处理器610也可以通过系统互连链接到适于将计算机设备60连接到显示设备的显示接口。显示设备可以包括作为计算机设备60的内置组件的显示屏。显示设备还可以包括外部连接到计算机设备60的计算机监视器、电视机或投影仪等。此外,网络接口控制器(network interface controller,NIC)可以适于通过系统互连将计算机设备60连接到网络。在一些实施例中,NIC可以使用任何合适的接口或协议(诸如因特网小型计算机系统接口等)来传输数据。网络可以是蜂窝网络、无线电网络、广域网(WAN)、局域网(LAN)或因特网等等。远程设备可以通过网络连接到计算设备。

本实施例提供的流程图并不旨在指示方法的操作将以任何特定的顺序执行,或者方法的所有操作都包括在所有的每种情况下。此外,方法可以包括附加操作。在本实施例方法提供的技术思路的范围内,可以对上述方法进行附加的变化。

至此,本领域技术人员应认识到,虽然本文已详尽示出和描述了本发明的多个示例性实施例,但是,在不脱离本发明精神和范围的情况下,仍可根据本发明公开的内容直接确定或推导出符合本发明原理的许多其他变型或修改。因此,本发明的范围应被理解和认定为覆盖了所有这些其他变型或修改。

相关技术
  • 数据库事务处理方法、装置、设备和计算机可读存储介质
  • 数据库同步恢复方法、装置、计算机可读存储介质和电子设备
  • 医疗数据库建立方法、装置、计算机设备和存储介质
  • 一种数据库高并发查询方法、设备和计算机可存储介质
  • 数据库脚本生成方法、装置、计算机设备及存储介质
  • 数据库查询语句处理方法、装置、计算机设备、存储介质
  • 数据库处理查询语句的方法、存储介质与计算机设备
技术分类

06120115847926