CN110515973B - 一种数据查询的优化方法、装置、设备及存储介质 - Google Patents

一种数据查询的优化方法、装置、设备及存储介质 Download PDF

Info

Publication number
CN110515973B
CN110515973B CN201910816840.8A CN201910816840A CN110515973B CN 110515973 B CN110515973 B CN 110515973B CN 201910816840 A CN201910816840 A CN 201910816840A CN 110515973 B CN110515973 B CN 110515973B
Authority
CN
China
Prior art keywords
statement
branch
node
sql
optimization
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
Application number
CN201910816840.8A
Other languages
English (en)
Other versions
CN110515973A (zh
Inventor
朱仲颖
刘志勇
韩朱忠
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shanghai Dameng Database Co Ltd
Original Assignee
Shanghai Dameng Database Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Shanghai Dameng Database Co Ltd filed Critical Shanghai Dameng Database Co Ltd
Priority to CN201910816840.8A priority Critical patent/CN110515973B/zh
Publication of CN110515973A publication Critical patent/CN110515973A/zh
Application granted granted Critical
Publication of CN110515973B publication Critical patent/CN110515973B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/242Query formulation
    • G06F16/2433Query languages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2453Query optimisation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种数据查询的优化方法、装置、设备及存储介质。通过确定解析后的结构化查询语言SQL语句为UNION集合类型语句后,确定所述UNION集合类型语句中的各分支语句的优化结果;根据所述各分支语句的优化结果,确定待执行分支语句;按照所述待执行分支语句进行结构化查询的技术手段,解决了现有技术中需要对集合类型的语句中的各个分支语句进行查询的问题,通过对UNION集合类型语句中的各分支语句进行优化处理,删除满足优化条件的分支语句,保留未满足优化条件的分支语句,仅按照保留的分支语句进行查询,减少扫描数据表的个数,提升查询效率。

Description

一种数据查询的优化方法、装置、设备及存储介质
技术领域
本发明实施例涉及数据查询技术领域,尤其涉及一种数据查询的优化方法、装置、设备及存储介质。
背景技术
随着信息化的不断深入发展,数据生成速度正在提高,需要处理的数据量急速膨胀,大数据时代即将到来。所谓大数据指所涉及的数据量规模巨大,以至于无法通过主流软件在合理的时间内进行处理的数据。对大规模的数据进存储、查询以及分析已经成为一个亟待解决的问题。
结构化查询语言(Structured Query Language,SQL),是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库***。
SQL通过不同的语句来实现数据查询和程序的设计,UNION集合类型语句是SQL语句中至关重要的一个语句。UNION集合类型语句一般包括多个分支语句,UNION集合类型语句主要将多个分支语句的查询结果进行集合操作。正常情况UNION集合类型语句中的各个分支语句都是先扫描表数据,然后根据过滤条件过滤数据得到结果集。
基于上述技术方案,在使用UNION集合类型语句进行查询时,需要对每个分支语句对应的数据表进行扫描,降低了查询效率。
发明内容
本发明提供一种数据查询的优化方法、装置、设备及存储介质,以实现在使用UNION集合类型语句进行查询时,减少扫描数据表的个数,提升查询效率。
第一方面,本发明实施例提供了一种数据查询的优化方法,包括:
确定解析后的结构化查询语言SQL语句为UNION集合类型语句后,确定所述UNION集合类型语句中的各分支语句的优化结果;
根据所述各分支语句的优化结果,确定待执行分支语句;
按照所述待执行分支语句进行结构化查询。
第二方面,本发明实施例还提供了一种数据查询的优化装置,包括:
优化结果确定模块,用于确定解析后的结构化查询语言SQL语句为UNION 集合类型语句后,确定所述UNION集合类型语句中的各分支语句的优化结果;
待执行分支语句确定模块,用于根据所述各分支语句的优化结果,确定待执行分支语句;
结构化查询模块,用于按照所述待执行分支语句进行结构化查询。
第三方面,本发明实施例还提供了一种设备,所述设备包括:
一个或多个处理器;
存储器,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如上述第一方面中所述的数据查询的优化方法。
第四方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如上述第一方面中所述的数据查询的优化方法。
本发明实施例通过确定解析后的结构化查询语言SQL语句为UNION集合类型语句后,确定UNION集合类型语句中的各分支语句的优化结果;根据各分支语句的优化结果,确定待执行分支语句;按照待执行分支语句进行结构化查询的技术手段,解决了现有技术中需要对UNION集合类型语句中的各个分支语句进行查询的问题。本实施例通过对UNION集合类型语句中的各分支语句进行优化处理,删除满足优化条件的分支语句,保留未满足优化条件的分支语句,仅按照保留的分支语句进行查询,减少扫描数据表的个数,提升查询效率。
附图说明
图1为本发明实施例一提供的数据查询的优化方法的流程图;
图2为本发明实施例二提供的数据查询的优化方法的流程图;
图3为本发明实施例三提供的数据查询的优化方法的流程图;
图4a是本发明实施例三提供的SQL二叉树的结构示意图;
图4b为本发明实施例三提供的优化后的SQL二叉树的结构示意图;
图5为本发明实施例三提供的数据查询的优化装置的结构示意图;
图6为本发明实施例四提供的一种设备的结构示意图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
实施例一
图1为本发明实施例一提供的数据查询的优化方法的流程图,本实施例可适用于UNION集合类型语句中分支语句的过滤条件为假时,进行查询的情况,该方法可以由数据查询的优化装置来执行,该数据查询的优化装置可以通过软件和/或硬件的方式实现。
SQL是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库***;同时也是数据库脚本文件的扩展名。SQL中的编程语句简称为SQL语句。
如图1所示,本实施例提供的数据查询的优化方法具体包括如下步骤:
S110、确定解析后的SQL语句为UNION集合类型语句后,确定所述UNION 集合类型语句中的各分支语句的优化结果。
在本实施例中,由于SQL是一种编程语言,SQL中为了实现查询、更新以及管理等,会存在不同类型的语句。SQL语句的类型可以根据SQL语句中定义的类型来确定。
集合由一个或多个元素构成的整体,在SQL中的表就代表着一个数据集合,而其中的查询就是在集合的基础上生成的结果集。SQL的集合运算符包括交集 INTERSECT,并集UNION(不包含重复的值),UNION ALL(包含重复的值),差集MINUS,非交集EXCEPT。UNION运算符包括:并集UNION(不包含重复的值)和UNION ALL(包含重复的值)。
进一步的,如果检测到SQL语句使用了UNION运算符时,则确定解析后的SQL语句为UNION集合类型语句。
接收到用户输入的SQL语句之后,对接收到的SQL语句进行语法和语义解析后,得到解析后的SQL语句。需要说明的是,本实施例中仅对SQL语句的解析进行说明,而非限定。可以根据实际情况选择合适的SQL语句解析方法对SQL语句进行解析。
需要说明的是,一个SQL语句可以是由一个分支语句构成也可以是由多个分支语句进行构成。一个SQL语句中,任意一个分支语句为UNION运算符时,则确定该SQL语句为UNION集合类型语句。然后对SQL语句中各个分支语句分别进行分析优化,得到优化结果。
在本实施例中,优化结果为删除分支语句,和保留分支语句。判断UNION 集合类型语句的分支语句的过滤条件是否恒为假。如果UNION集合类型语句的分支语句的过滤条件为真,则将过滤条件为真的分支语句进行保留,并将另一分支语句作为新的分支语句进行判断,返回执行判断分支语句的过滤条件是否恒为假的操作。
如果分支语句的过滤条件恒为假,则判断UNION集合类型语句的分支语句个数是否大于1,如果UNION集合类型语句的分支语句个数大于1,则删除过滤条件恒为假对应的分支语句,并将分支语句个数减去1,并将下一分支语句作为新的分支语句进行判断,返回执行判断分支语句的过滤条件是否恒为假的操作。
如果UNION集合类型语句的分支语句个数等于1,则不删除过滤条件恒为假对应的分支语句,以确定至少保留一个分支语句进行查询。
例如;SQL语句如下:
SELECT*FROM T1 WHERE C1<10AND C1>10UNION ALL SELECT* FROM T2;
上述SQL语句中,UNION集合类型语句存在两个分支语句,第一个分支语句是:SELECT*FROM T1 WHERE C1<10AND C1>10;第二个分支语句是: SELECT*FROM T2。
首先,对第一个分支语句进行分析,第一分支语句的过滤条件是C1<10 AND C1>10,可知,第一分支语句的过滤条件恒为假,可以进行优化,且目前 SQL语句中包含2个分支语句,满足UNION集合类型语句的分支语句个数大于1的条件,可以删除第一分支语句,并将分支语句个数减1。继续分析第二分支语句,第二分支语句没有过滤条件,且只剩下1个分支语句。没有其他分支可以继续进行优化。
S120、根据各分支语句的优化结果,确定待执行分支语句。
进一步的,在本实施例中,优化结果包括为删除分支语句,和保留分支语句。删除的分支语句不再进行处理。将保留分支语句进行组合整理,得到待执行分支语句。
以上述例子进行说明,删除了第一分支语句,保留了第二分支语句,将第二分支语句确定为待执行分支语句。即待执行分支语句为:SELECT*FROM T2。
S130、按照待执行分支语句进行结构化查询。
在本实施例中,按照待执行分支语句进行结构化查询是指按照待执行语句进行常规的查询即可。本实施例中,不对结构化查询的方法进行限定。
进一步的,待执行分支语句为:SELECT*FROM T2。与优化之前的SQL 语句相比,减少了对表1的扫描,即大大减少了扫描表的个数,提升了查询效率。
本实施例的技术方案,通过确定解析后的结构化查询语言SQL语句为 UNION集合类型语句后,确定UNION集合类型语句中的各分支语句的优化结果;根据各分支语句的优化结果,确定待执行分支语句;按照待执行分支语句进行结构化查询的技术手段,解决了现有技术中需要对UNION集合类型语句中的各个分支语句进行查询的问题。本实施例通过对UNION集合类型语句中的各分支语句进行优化处理,删除满足优化条件的分支语句,保留未满足优化条件的分支语句,仅按照保留的分支语句进行查询,减少扫描数据表的个数,提升查询效率。
实施例二
图2为本发明实施例二提供的数据查询的优化方法的流程图,本实施例在上述各实施例的基础上,进一步优化了数据查询的优化方法。如图2所示,优化后的数据查询的优化方法主要包括如下步骤:
S210、对用户输入的SQL语句进行语法和语义解析,得到解析后的SQL 语句。
需要说明的是,SQL语句的语法和语义解析通常由服务器来执行。对用户输入的SQL语句进行语法和语义解析包括:对SQL语句的语法进行检查,看看其是否合乎语法规则。如果服务器进程认为这条SQL语句不符合语法规则的时候,就会把这个错误信息反馈给客户端。在这个语法检查的过程中,不会对 SQL语句中所包含的表名、列名等等进行检查,SQL只是语法上的检查。
若SQL语句符合语法上的定义,则接下去会对语句中的字段、表等内容进行检查。看看这些字段、表是否在数据库中。如果表名与列名不准确的话,则数据库会就会反馈错误信息给客户端。
当语法、语义通过检查之后,得到解析后的SQL语句。需要说明的是,本实施例中仅对语法和语义解析进行说明,而非限定。
S220、判断解析后的SQL语句是否为UNION集合类型语句,若是,则执行S230,若否,则执行S290。
SQL的集合运算符包括交集(INTERSECT)、并集(UNION(不包含重复的值)或UNIONALL(包含重复的值))、差集MINUS、非交集(EXCEPT)。集合类型语句为使用SQL集合运算符的SQL语句。UNION集合类型语句为使用了UNION运算符语句的集合类型语句。
判断SQL语句中是否包含UNION运算符,如果未包含,则确定SQL语句是非UNION集合类型语句。如果包含了UNION集合运算符,则确定SQL语句是UNION集合类型语句。
例如,SQL语句s1 INTERSECT(s2 UNION s3)EXCEPT s4 UNION s5;就是一个UNION集合类型语句。
S230、针对UNION集合类型语句中的各分支语句,判断分支语句是否满足优化条件;若是,则执行S240,若否,则执行S260。
其中,分支语句为UNION集合运算符的分支,分支语句满足优化条件包括:分支语句的过滤条件为假,且所述分支语句对应的分支语句个数大于1。所述分支语句未满足优化条件包括:所述分支语句的过滤条件为真;和/或,所述分支语句的过滤条件为假,且所述分支语句对应的分支语句个数等于1。
在本实施例中,针对UNION集合类型语句中的各分支语句,从第一个分支语句开始,依次判断是否满足优化条件,直至所有分支语句全部判断完毕。
进一步的,判断第一分支语句过滤条件是否为假,如果第一分支语句过滤条件为假,则确定第一分支语句满足优化条件;然后,不论第二分支是真还是假,则均确定第二分支语句未满足优化条件;如果第一分支语句过滤条件为真,则确定第一分支语句不满足优化条件;然后继续判断第二分支是否为假,如果为假,则确定第二分支满足优化条件,如果为真,则确定第二分支不满足优化条件。
进一步的,判断第一分支语句过滤条件是否为假,如果第一分支语句过滤条件为假,则判断集合类型语句中的分支语句个数是否大于1,如果集合类型语句中的分支语句个数大于1,则确定第一分支语句满足优化条件;然后,判断第二分支语句过滤条件是否为假,如果第二分支语句过滤条件为真,则确定第二分支语句未满足优化条件;然后,判断第三分支语句过滤条件是否为假,如果第一分支语句过滤条件为假,则判断集合类型语句中的分支语句个数是否大于1,如果集合类型语句中的分支语句个数小于等于1,则确定第三分支语句未满足优化条件。
S240、确定所述分支语句的优化结果为删除满足优化条件的分支语句。
在本实施例中,如果分支语句满足优化条件,则删除满足优化条件的分支语句,如上述第一分支语句满足优化条件,则将第一分支语句删除。
S250、将分支语句个数减一,得到后一分支语句对应的分支语句个数。
本实施例中,分支语句个数可以理解为集合类型语句包含的分支语句的个数。
在本实施例中,如上述第一分支语句满足优化条件,则将第一分支语句删除后,将分支语句个数减去1,并作为第二分支语句对应的分支语句个数。第二分支语句对应的分支语句个数可以理解为分析第二分支语句是否满足优化条件时,集合类型语句中包含的分支语句的个数。
S260、确定所述分支语句的优化结果为保留未满足优化条件的分支语句。
在本实施例中,如果分支语句未满足优化条件,则保留未满足优化条件的分支语句。
S270、将保留的未满足优化条件的各分支语句,确定为待执行分支语句。
S280、按照所述待执行分支语句进行结构化查询。
在本实施例中,将保留的为未满足优化条件的分支语句,进行结构化查询。
S290、按照解析后的SQL语句进行结构化查询。
如果SQL语句中不包含UNION集合运算符,则确定SQL语句是非UNION 集合类型语句,则表明该SQL语句不能进行优化处理,直接对SQL语句进行查询,不对SQL语句进行优化。
本实施例的技术方案,通过确定解析后的结构化查询语言SQL语句为 UNION集合类型语句后,确定UNION集合类型语句中的各分支语句的优化结果;根据各分支语句的优化结果,确定待执行分支语句;按照待执行分支语句进行结构化查询的技术手段,解决了现有技术中需要对UNION集合类型语句中的各个分支语句进行查询的问题。本实施例通过对UNION集合类型语句中的各分支语句进行优化处理,删除满足优化条件的分支语句,保留未满足优化条件的分支语句,仅按照保留的分支语句进行查询,减少扫描数据表的个数,提升查询效率。
在上述实施例的基础上,本发明实施例提供一种优选实例。
首先,创建数据表T1和T2,并且在数据表T1和T2中存储相应的数据。
CREATE TABLE T1(c1 INT,c2 INT);
CREATE TABLE T2(d1 INT,d2 INT);
INSERT INTO T1 VALUES(1,NULL);
INSERT INTO T2 VALUES(2,1);
SQL语句为:
SQL>SELECT*FROM T1 WHERE C1<10 AND C1>10 UNION ALL SELECT*FROM T2;
按照现有的不进行优化的执行步骤是:
Figure BDA0002186562440000111
其中,8步是扫描T2表,7步是数据投影,例如查询项为C1+1,数据投影会计算好表达式运算,存下计算后的结果;6、5是扫描T1表,4步是数据投影; 3是将T2和T1的结果合并。2步是数据投影,1步是返回最终的结果集。
本实施例中,优化后的执行步骤是:
Figure BDA0002186562440000121
优化后,简化了中间6、5、4、3几步,减少了对T1表的扫描。
该优化方法提供在SQL分析阶段识别判断各个查询子句的过滤条件是不是恒为假,如果恒为假查询子句的结果集一定为空集,则可以直接在分析阶段将 SQL的查询分支去掉,减少执行阶段扫描数据次数,从而提升查询效率。例如上述实例中,优化前需要对T1进行扫描过滤,优化后只需要对T2进行查询。
实施例三
图3为本发明实施例二提供的数据查询的优化方法的流程图,本实施例在上述各实施例的基础上,进一步优化了数据查询的优化方法。如图2所示,优化后的数据查询的优化方法主要包括如下步骤:
S310、确定解析后的结构化查询语言SQL语句为UNION集合类型语句。
S320、将解析后的SQL语句的集合操作符作为SQL二叉树的根节点,建立SQL二叉树。
对用户输入的SQL查询语句进行语法和语义解析后,生成SQL的内存结构一棵SQL语法树。
如果语法树根节点类型为非集合语句类型即没有分支,直接则按照解析后的SQL语句进行结构化查询。否则根据SQL中的分支语句建立SQL二叉树。
上述SQL语法树为二叉树。二叉树是每个结点最多有两个子树的树结构。通常子树被称作“左子树”和“右子树”。
首先,创建数据表T1、T2、T3和T4,并且在数据表T1、T2、T3和T4 中存储相应的数据。
CREATE TABLE T1(c1 INT,c2 INT);
CREATE TABLE T2(d1 INT,d2 INT);
CREATE TABLE T3(e1 INT,e2 INT);
CREATE TABLE T4(f1 INT,f2 INT);
INSERT INTO T1 VALUES(1,NULL);
INSERT INTO T2 VALUES(2,1);
INSERT INTO T3 VALUES(2,1);
INSERT INTO T4 VALUES(1,1);
对上述的数据表T1,T2、T3和T4表执行集合运算查询。SQL语句如下:
SELECT*FROM T1 WHERE C1<10AND C1>10INTERSECT SELECT* FROM T2 EXCEPT(SELECT*FROM T3 WHERE E1<10AND E1>10UNION ALL SELECT*FROM T4 WHERE f1<10ANDf1>10);
首先经过语法语义分析SQL后得到SQL语法树。根据集合运算运算顺序是从左往右,并且括号优先,二叉树生成则是从右往左生成,图4a是本发明实施例三提供的SQL二叉树的结构示意图;如图4a所示,将SQL语句的整个语句看为EXCEPT集合运算,其中,根节点的节点类型为EXCEPT。EXCEPT左右两边SQL分别为根节点的左右子树。左子树SELECT*FROM T1WHERE C1 <10AND C1>10INTERSECT SELECT*FROM T2,右子树(SELECT*FROM T3 WHERE E1<10AND E1>10UNION ALL SELECT*FROM T4 WHERE f1<10 AND f1>10);由于左右子树都是集合类型SQL可以继续递归生成子二叉树,左子树根节点为INTERSECT类型,左右孩子分别为T1,T2查询,右子树根节点类型为UNION,左右孩子分别为T3,T4查询。
S330、采用先序遍历所述SQL二叉树每个节点。
先序遍历(Pre-order)是指按照根左右的顺序沿一定路径经过路径上所有的结点。在二叉树中,先分析根节点,再分析 左叶子节点,最后分析右叶子节点。本发明以先序遍历为例,但不限于这种遍历方式,中序遍历或后续遍历都可以。
S340、根据所述SQL二叉树各个节点对应的节点类型,对所述UNION集合类型语句中的各个分支语句进行优化,得到各分支语句的优化结果。
具体的,依次确定各节点对应的节点类型;如果节点对应的节点类型为父节点,则获取所述节点的左子节点作为新的节点,返回执行确定各节点对应的节点类型的操作;如果节点对应的节点类型为叶子节点,则判断所述叶子节点对应的分支语句是否满足过滤条件,所述叶子节点对应的分支语句是否满足过滤条件包括:所述叶子节点对应的分支语句的过滤条件为假,且所述叶子节点所属父节点对应的语句类型为UNION集合类型;所述叶子节点对应的分支语句满足过滤条件,则将所述叶子节点删除,并将与所述叶子节点位于同一层的兄弟节点替换为父节点在SQL二叉树中的位置,继续分析下一个节点;直到各个节点均分析完毕,将新的SQL二叉树确定各分支语句的优化结果。
采用先序遍历二叉树递归分析每个节点,如果节点类型不是叶子节点,继续下一个节点。如果节点类型为单个语句,即叶子节点,没有分支,则判断该节点是否为根节点。如果该节点为根节点,则不进行优化,直接将该根节点进行反拼,得到的待执行分支语句。
如果该叶子节点不为根节点,对节点上的存的where表达式进行判断,如果where表达式恒为FALSE且该节点的父亲节点类型为UNION,则对SQL二叉树进行调整,生成新的SQL二叉树。
当该叶子节点的父节点是根节点时:如果该节点为左叶子节点,将根节点替换为右叶子节点;如果该节点为右叶子节点,将根节点替换为左叶子节点。
当该叶子节点的父节点不是根节点时,存在以下4种情况:
1、如果该节点为左叶子节点,如果该节点的父节点也为左节点,将父节点替换为右叶子节点;
2、如果该节点为左叶子节点,如果该节点的父节点为右节点,将父节点替换为右叶子节点;
3、如果该节点为右叶子节点,如果该节点的父节点为左节点,将父节点替换为左叶子节点;
4、如果该节点为右叶子节点,如果该节点的父节点为右节点,将父节点替换为左叶子节点;
语法树调整完后继续分析下一个节点。直至所有的节点分析完毕。
具体的,如图4中所述,先序遍历后得到节点分析顺序为root、s1、s3、s4、 s2、s5、s6。首先分析根节点root:根节点的类型为EXCEPT,且不为叶子节点,继续分析下一个节点s1,s1不为叶子节点,继续分析下一个节点s3,s3节点为叶子节点,为关于数据表T1的查询,且s3不为根节点,对节点内存里存的过滤条件进行判断,其过滤条件为C1<10AND C1>10恒为假,但是s3的父节点 s1为INTERSECT类型不满足优化条件,继续分析s4,s4父节点也是s1不满足优化条件,继续分析s2,s2不为叶子节点,继续分析s5,s5为叶子节点,且过滤条件e1<10AND e1>10恒为假,父节点s2类型为union,并且s5不为根节点可以优化,调整SQL语法树,将s2节点的位置替换为s5的兄弟节点s6,s2, s5节点删除,形成新的SQL二叉树。图4b为本发明实施例二提供的优化后的 SQL二叉树的结构示意图;新的SQL二叉树如4b所示。
然后,继续分析s6,s6为叶节点,但是s6的父节点在图4b中为root,类型为except不能优化,所有节点分析完成,最终优化得到的语法树为图4b。
S350、根据所述各分支语句的优化结果,确定待执行分支语句。
S360、按照所述待执行分支语句进行结构化查询。
根据的新的SQL语法树图4b反拼出SQL语句的待执行分支语句为: SELECT*FROMT1 WHERE C1<10AND C1>10INTERSECT SELECT* FROM T2 EXCEPT(SELECT*FROM T4 WHEREf1<10AND f1>10);,对改写后语句语法语义分析然后执行SQL。和优化之前的SQL相比,大大减少了扫描表的个数,提升了查询效率。
实施例四
图5为本发明实施例四提供的数据查询的优化装置的结构示意图,本实施例可适用于UNION ALL语句中分支语句的过滤条件为假时,进行查询的情况,该数据查询的优化装置可以通过软件和/或硬件的方式实现。
如图5所示,本实施例提供的数据查询的优化装置具体包括如下模块:优化结果确定模块510、待执行分支语句确定模块520和结构化查询模块530。
其中,优化结果确定模块510,用于确定解析后的结构化查询语言SQL语句为UNION集合类型语句后,确定所述UNION集合类型语句中的各分支语句的优化结果;
待执行分支语句确定模块520,用于根据所述各分支语句的优化结果,确定待执行分支语句;
结构化查询模块530,用于按照所述待执行分支语句进行结构化查询。
本实施例提供的数据查询的优化的装置,通过确定解析后的结构化查询语言SQL语句为UNION集合类型语句后,确定UNION集合类型语句中的各分支语句的优化结果;根据各分支语句的优化结果,确定待执行分支语句;按照待执行分支语句进行结构化查询的技术手段,解决了现有技术中需要对UNION 集合类型语句中的各个分支语句进行查询的问题。本实施例通过对UNION集合类型语句中的各分支语句进行优化处理,删除满足优化条件的分支语句,保留未满足优化条件的分支语句,仅按照保留的分支语句进行查询,减少扫描数据表的个数,提升查询效率。
进一步的,优化结果确定模块310,包括:
判断单元,用于针对各分支语句,判断分支语句是否满足优化条件;
删除确定单元,用于如果所述分支语句满足优化条件,则确定所述分支语句的优化结果为删除满足优化条件的分支语句,将分支语句个数减一,得到后一分支语句对应的分支语句个数;其中,所述分支语句满足优化条件包括:所述分支语句的过滤条件为假,且所述分支语句对应的分支语句个数大于1;
保留确定单元,如果所述分支语句未满足优化条件,则确定所述分支语句的优化结果为保留未满足优化条件的分支语句;其中,所述分支语句未满足优化条件包括:所述分支语句的过滤条件为真;和/或,所述分支语句的过滤条件为假,且所述分支语句对应的分支语句个数等于1。
进一步的,待执行分支语句确定模块320,具体用于将保留的未满足优化条件的各分支语句,确定为待执行分支语句。
进一步的,所述分支语句满足优化条件包括:所述分支语句的过滤条件为假,且所述分支语句对应的分支语句个数大于1。
进一步的,所述装置还包括:
SQL二叉树建立模块,用于将解析后的SQL语句的集合操作符作为SQL二叉树的根节点,建立SQL二叉树。
进一步的,优化结果确定模块510,包括:
节点遍历单元,用于采用先序遍历所述SQL二叉树每个节点,
优化结果确定单元,用于根据所述SQL二叉树各个节点对应的节点类型,对所述UNION集合类型语句中的各个分支语句进行优化,得到各分支语句的优化结果。
具体的,优化结果确定单元,具体用于依次确定各节点对应的节点类型;如果节点对应的节点类型为父节点,则获取所述节点的左子节点作为新的节点,返回执行确定各节点对应的节点类型的操作;如果节点对应的节点类型为叶子节点,则判断所述叶子节点对应的分支语句是否满足过滤条件,所述叶子节点对应的分支语句是否满足过滤条件包括:所述叶子节点对应的分支语句的过滤条件为假,且所述叶子节点所属父节点对应的语句类型为UNION集合类型;所述叶子节点对应的分支语句满足过滤条件,则将所述叶子节点删除,并将与所述叶子节点位于同一层的兄弟节点替换为父节点在SQL二叉树中的位置,继续分析下一个节点;直到各个节点均分析完毕,将新的SQL二叉树确定各分支语句的优化结果。
结构化查询模块530,还用于检测到解析后的结构化查询语言SQL语句为非UNION集合类型语句时,则按照解析后的SQL语句进行结构化查询。
本发明实施例所提供的数据查询的优化装置可执行本发明任意实施例所提供的数据查询的优化方法,具备执行方法相应的功能模块和有益效果。
实施例四
图6为本发明实施例四提供的一种设备的结构示意图,如图6所示,该设备包括处理器610、存储器620、输入装置630和输出装置640;设备中处理器 610的数量可以是一个或多个,图6中以一个处理器610为例;设备中的处理器610、存储器620、输入装置630和输出装置640可以通过总线或其他方式连接,图6中以通过总线连接为例。
存储器620作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本发明实施例中的数据查询的优化方法对应的程序指令/模块(例如,数据查询的优化装置中的优化结果确定模块510、待执行分支语句确定模块520和结构化查询模块530)。处理器610通过运行存储在存储器 620中的软件程序、指令以及模块,从而执行设备的各种功能应用以及数据处理,即实现上述的数据查询的优化方法。
存储器620可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作***、至少一个功能所需的应用程序;存储数据区可存储根据终端的使用所创建的数据等。此外,存储器620可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储器620可进一步包括相对于处理器610 远程设置的存储器,这些远程存储器可以通过网络连接至设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
输入装置630可用于接收输入的数字或字符信息,以及产生与设备的用户设置以及功能控制有关的键信号输入。输出装置640可包括显示屏等显示设备。
实施例五
本发明实施例五还提供一种包含计算机可执行指令的存储介质,所述计算机可执行指令在由计算机处理器执行时用于执行一种数据查询的优化方法,该方法包括:
确定解析后的结构化查询语言SQL语句为UNION集合类型语句后,确定所述UNION集合类型语句中的各分支语句的优化结果;
根据所述各分支语句的优化结果,确定待执行分支语句;
按照所述待执行分支语句进行结构化查询。
当然,本发明实施例所提供的一种包含计算机可执行指令的存储介质,其计算机可执行指令不限于如上所述的方法操作,还可以执行本发明任意实施例所提供的数据查询的优化方法中的相关操作.
通过以上关于实施方式的描述,所属领域的技术人员可以清楚地了解到,本发明可借助软件及必需的通用硬件来实现,当然也可以通过硬件实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如计算机的软盘、只读存储器 (Read-Only Memory,ROM)、随机存取存储器(RandomAccess Memory,RAM)、闪存(FLASH)、硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
值得注意的是,上述数据查询的优化装置的实施例中,所包括的各个单元和模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。

Claims (8)

1.一种数据查询的优化方法,其特征在于,包括:
确定解析后的结构化查询语言SQL语句为UNION集合类型语句后,确定所述UNION集合类型语句中的各分支语句的优化结果;
根据所述各分支语句的优化结果,确定待执行分支语句;
按照所述待执行分支语句进行结构化查询;
所述确定所述UNION集合类型语句中的各分支语句的优化结果之前,还包括:将解析后的SQL语句的集合操作符作为SQL二叉树的根节点,建立SQL二叉树;
根据所述SQL二叉树各个节点对应的节点类型,对所述UNION集合类型语句中的各个分支语句进行优化,得到各分支语句的优化结果,包括:
依次确定各节点对应的节点类型;
如果节点对应的节点类型为父节点,则获取所述节点的左子节点作为新的节点,返回执行确定各节点对应的节点类型的操作;
如果节点对应的节点类型为叶子节点,则判断所述叶子节点对应的分支语句是否满足过滤条件,所述叶子节点对应的分支语句是否满足过滤条件包括:所述叶子节点对应的分支语句的过滤条件为假,且所述叶子节点所属父节点对应的语句类型为UNION集合类型;
所述叶子节点对应的分支语句满足过滤条件,则将所述叶子节点删除,并将与所述叶子节点位于同一层的兄弟节点替换为父节点在SQL二叉树中的位置,继续分析下一个节点;
直到各个节点均分析完毕,将新的SQL二叉树确定各分支语句的优化结果。
2.根据权利要求1所述的方法,其特征在于,所述确定所述UNION集合类型语句中的各分支语句的优化结果,包括:
针对各分支语句,判断分支语句是否满足优化条件;
如果所述分支语句满足优化条件,则确定所述分支语句的优化结果为删除满足优化条件的分支语句,将分支语句个数减一,得到后一分支语句对应的分支语句个数;其中,所述分支语句为UNION集合运算的分支,所述分支语句满足优化条件包括:所述分支语句的过滤条件为假,且所述分支语句对应的分支语句个数大于1;
如果所述分支语句未满足优化条件,则确定所述分支语句的优化结果为保留未满足优化条件的分支语句;其中,所述分支语句未满足优化条件包括:所述分支语句的过滤条件为真;和/或,所述分支语句的过滤条件为假,且所述分支语句对应的分支语句个数等于1。
3.根据权利要求2所述的方法,其特征在于,根据所述各分支语句的优化结果,确定待执行分支语句,包括:
将保留的未满足优化条件的各分支语句,确定为待执行分支语句。
4.根据权利要求1所述的方法,其特征在于,所述确定所述UNION集合类型语句中的各分支语句的优化结果,包括:
采用先序遍历所述SQL二叉树每个节点,
根据所述SQL二叉树各个节点对应的节点类型,对所述UNION集合类型语句中的各个分支语句进行优化,得到各分支语句的优化结果。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
检测到解析后的结构化查询语言SQL语句为非UNION集合类型语句时,则按照解析后的SQL语句进行结构化查询。
6.一种数据查询的优化装置,其特征在于,包括:
优化结果确定模块,用于确定解析后的结构化查询语言SQL语句为UNION集合类型语句后,确定所述UNION集合类型语句中的各分支语句的优化结果;
待执行分支语句确定模块,用于根据所述各分支语句的优化结果,确定待执行分支语句;
结构化查询模块,用于按照所述待执行分支语句进行结构化查询;
所述数据查询的优化装置包括:SQL二叉树建立模块,用于将解析后的SQL语句的集合操作符作为SQL二叉树的根节点,建立SQL二叉树;
所述优化结果确定模块,包括:
节点遍历单元,用于采用先序遍历所述SQL二叉树每个节点;
优化结果确定单元,用于根据所述SQL二叉树各个节点对应的节点类型,对所述UNION集合类型语句中的各个分支语句进行优化,得到各分支语句的优化结果;
所述优化结果确定单元,具体用于依次确定各节点对应的节点类型;如果节点对应的节点类型为父节点,则获取所述节点的左子节点作为新的节点,返回执行确定各节点对应的节点类型的操作;如果节点对应的节点类型为叶子节点,则判断所述叶子节点对应的分支语句是否满足过滤条件;所述叶子节点对应的分支语句是否满足过滤条件包括:所述叶子节点对应的分支语句的过滤条件为假,且所述叶子节点所属父节点对应的语句类型为UNION集合类型;所述叶子节点对应的分支语句满足过滤条件,则将所述叶子节点删除,并将与所述叶子节点位于同一层的兄弟节点替换为父节点在SQL二叉树中的位置,继续分析下一个节点;直到各个节点均分析完毕,将新的SQL二叉树确定各分支语句的优化结果。
7.一种设备,其特征在于,所述设备包括:
一个或多个处理器;
存储器,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-5中任一所述的数据查询的优化方法。
8.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-5中任一所述的数据查询的优化方法。
CN201910816840.8A 2019-08-30 2019-08-30 一种数据查询的优化方法、装置、设备及存储介质 Active CN110515973B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910816840.8A CN110515973B (zh) 2019-08-30 2019-08-30 一种数据查询的优化方法、装置、设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910816840.8A CN110515973B (zh) 2019-08-30 2019-08-30 一种数据查询的优化方法、装置、设备及存储介质

Publications (2)

Publication Number Publication Date
CN110515973A CN110515973A (zh) 2019-11-29
CN110515973B true CN110515973B (zh) 2022-02-18

Family

ID=68629612

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910816840.8A Active CN110515973B (zh) 2019-08-30 2019-08-30 一种数据查询的优化方法、装置、设备及存储介质

Country Status (1)

Country Link
CN (1) CN110515973B (zh)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110990423B (zh) * 2019-12-12 2023-04-18 上海达梦数据库有限公司 Sql语句的执行方法、装置、设备和存储介质
CN111159228A (zh) * 2019-12-26 2020-05-15 北京神州绿盟信息安全科技股份有限公司 一种数据查询方法和装置
CN111506602B (zh) * 2020-04-20 2023-05-09 上海达梦数据库有限公司 数据查询方法、装置、设备和存储介质
CN112069198B (zh) * 2020-07-16 2021-09-10 中科驭数(北京)科技有限公司 Sql解析优化方法和装置
CN112286961B (zh) * 2020-09-29 2022-11-18 苏宁云计算有限公司 Sql优化查询方法及装置
CN112199390B (zh) * 2020-09-30 2023-05-30 上海达梦数据库有限公司 一种数据库中数据查询方法、装置、设备及存储介质
CN113641701B (zh) * 2021-10-13 2022-02-18 苏州浪潮智能科技有限公司 一种数据查询方法、***、异构加速平台及存储介质
CN114490709B (zh) * 2021-12-28 2023-03-24 北京百度网讯科技有限公司 文本生成方法、装置、电子设备及存储介质
CN117271576A (zh) * 2023-10-19 2023-12-22 北京人大金仓信息技术股份有限公司 一种查询优化方法、存储介质与计算机设备

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108563694A (zh) * 2018-03-19 2018-09-21 广州视源电子科技股份有限公司 对逻辑删除的sql执行方法、装置、计算机设备和存储介质

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100535905C (zh) * 2007-06-08 2009-09-02 北京神舟航天软件技术有限公司 去除sql查询语句恒条件的方法
US10521425B2 (en) * 2016-08-31 2019-12-31 Sap Se Generating faster and efficient database query execution plans
US11120021B2 (en) * 2017-01-11 2021-09-14 Facebook, Inc. Systems and methods for optimizing queries
CN108304505B (zh) * 2018-01-18 2020-09-11 上海达梦数据库有限公司 一种sql语句的处理方法、装置、服务器及存储介质
CN110162574B (zh) * 2019-05-27 2020-11-03 上海达梦数据库有限公司 数据重分布方式的确定方法、装置、服务器及存储介质

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108563694A (zh) * 2018-03-19 2018-09-21 广州视源电子科技股份有限公司 对逻辑删除的sql执行方法、装置、计算机设备和存储介质

Also Published As

Publication number Publication date
CN110515973A (zh) 2019-11-29

Similar Documents

Publication Publication Date Title
CN110515973B (zh) 一种数据查询的优化方法、装置、设备及存储介质
CN108804554B (zh) 一种数据库查询方法、装置、服务器和存储介质
JPH04299459A (ja) データベースアクセスシステム
CN110019384B (zh) 一种血缘数据的获取方法、提供血缘数据的方法及装置
CN111324577B (zh) 一种Yml文件读写的方法及装置
CN110502532B (zh) 远程数据库对象的优化方法、装置、设备和存储介质
CN114510611A (zh) 一种构建元数据血缘图谱的方法、装置及相关设备
CN111309753B (zh) 结构化查询语句的优化方法、装置、设备及存储介质
Tekli et al. Approximate XML structure validation based on document–grammar tree similarity
CN108549688B (zh) 一种数据操作的优化方法、装置、设备和存储介质
CN108629124B (zh) 一种基于活动图路径的仿真参数数据自动生成方法
CN112199390B (zh) 一种数据库中数据查询方法、装置、设备及存储介质
CN116483850A (zh) 数据处理方法、装置、设备以及介质
CN110990423B (zh) Sql语句的执行方法、装置、设备和存储介质
CN107679107B (zh) 一种基于图数据库的电网设备可达性查询方法及***
CN110188432B (zh) ***架构的验证方法、电子设备及计算机可读存储介质
CN116910085A (zh) 数据查询方法、装置、设备和存储介质
CN111563094A (zh) 一种数据查询方法及装置、电子设备、计算机可读存储介质
CN112799673B (zh) 一种网络协议数据的校核方法及装置
CN113590650A (zh) 基于特征表达式的结构化查询语句甄别方法及装置
CN114328525A (zh) 数据处理方法及设备
CN110162574B (zh) 数据重分布方式的确定方法、装置、服务器及存储介质
CN114489723A (zh) 一种通用的配置差异比较方法和装置
CN110895529B (zh) 结构化查询语言的处理方法及相关装置
KR101225333B1 (ko) 구문론적으로 분석된 텍스트 코퍼스로부터 정보를 추출하는 트리 패턴 표현식을 이용한 시스템 및 방법

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