CN108628975A - 一种数据库sql语句优化方法及装置 - Google Patents
一种数据库sql语句优化方法及装置 Download PDFInfo
- Publication number
- CN108628975A CN108628975A CN201810381164.1A CN201810381164A CN108628975A CN 108628975 A CN108628975 A CN 108628975A CN 201810381164 A CN201810381164 A CN 201810381164A CN 108628975 A CN108628975 A CN 108628975A
- Authority
- CN
- China
- Prior art keywords
- database sql
- sql sentence
- sentence
- database
- clause
- 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.)
- Granted
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种数据库SQL语句优化方法及装置。该方法包括:获取用户输入的数据库SQL语句;若数据库SQL语句中存在查询项,则依次判断数据库SQL语句中是否存在去重关键字和分组子句;若数据库SQL语句中存在去重关键字和分组子句,则获取数据库SQL语句中的分组项;若查询项包含数据库SQL语句中的全部分组项,则判断数据库SQL语句中是否存在分组统计数据子句;若数据库SQL语句中不存在分组统计数据子句,则将数据库SQL语句中的去重关键字删除生成新的数据库SQL语句,并执行新的数据库SQL语句,通过本发明的技术方案,能够实现检测出可以进行消除DISTINCT关键字的数据库SQL语句,并对检测出的数据库SQL语句进行优化的效果。
Description
技术领域
本发明实施例涉及计算机技术,尤其涉及一种数据库SQL语句优化方法及装置。
背景技术
SQL语言,是结构化查询语言(Structured Query Language)的简称。SQL语言是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。
结构化查询语言(Structured Query Language,SQL语言)是最重要也是最常用的关系数据库操作语言,DISTINCT关键字是SQL标准中用来去除重复数据的关键字。
在当前通用的数据库技术中,为了实现去除重复数据的效果,不管语句所对应的表结构和数据特征,都需要将表中的数据取出来,按照DISTINCT关键字指定的去重项来计算。但是,在某些特定情况下,是不需要经过“计算去重”这一步骤也可以得到相同结果的,若使用当前通用的数据库技术则会导致增加处理的复杂度。
发明内容
本发明提供一种数据库SQL语句优化方法及装置,以实现检测出可以进行消除DISTINCT关键字的数据库SQL语句,并对检测出的数据库语句进行优化的效果。
第一方面,本发明实施例提供了一种数据库SQL语句优化方法,该方法包括:获取用户输入的数据库SQL语句;
若所述数据库SQL语句中存在查询项,则依次判断所述数据库SQL语句中是否存在去重关键字和分组子句;
若所述数据库SQL语句中存在所述去重关键字和所述分组子句,则获取所述数据库SQL语句中的分组项;
若所述查询项包含所述数据库SQL语句中的全部分组项,则判断所述数据库SQL语句中是否存在分组统计数据子句;
若所述数据库SQL语句中不存在所述分组统计数据子句,则将所述数据库SQL语句中的去重关键字删除生成新的数据库SQL语句,并执行所述新的数据库SQL语句。
进一步的,还包括:
若所述数据库SQL语句中存在去重关键字,且不存在所述分组子句,则判断所述查询项中是否存在聚集函数;
若所述查询项中存在所述聚集函数,则将所述数据库SQL语句中的去重关键字删除生成新的数据库SQL语句,并执行所述新的数据库SQL语句。
进一步的,还包括:
若所述数据库SQL语句中不存在所述去重关键字,则执行所述数据库SQL语句。
进一步的,若所述数据库SQL语句中存在所述分组统计数据子句,则执行所述数据库SQL语句。
进一步的,所述去重关键字为DISTINCT。
进一步的,所述分组子句包括:GROUP BY子句。
进一步的,所述分组统计数据子句包括:GROUP BY ROLLUP子句和/或GROUP BYCUBE子句。
第二方面,本发明实施例还提供了一种数据库SQL语句优化装置,该装置包括:获取模块,用于获取用户输入的数据库SQL语句;
第一判断模块,用于若所述数据库SQL语句中存在查询项,则依次判断所述数据库SQL语句中是否存在去重关键字和分组子句;
第二判断模块,用于若所述数据库SQL语句中存在所述去重关键字和所述分组子句,则获取所述数据库SQL语句中的分组项;
第三判断模块,用于若所述查询项包含所述数据库SQL语句中的全部分组项,则判断所述数据库SQL语句中是否存在分组统计数据子句;
第一执行模块,用于若所述数据库SQL语句中不存在所述分组统计数据子句,则将所述数据库SQL语句中的去重关键字删除生成新的数据库SQL语句,并执行所述新的数据库SQL语句。
进一步的,还包括:
第四判断模块,用于若所述数据库SQL语句中存在去重关键字,且不存在所述分组子句,则判断所述查询项中是否存在聚集函数;
第二执行模块,用于若所述查询项中存在所述聚集函数,则将所述数据库SQL语句中的去重关键字删除生成新的数据库SQL语句,并执行所述新的数据库SQL语句。
进一步的,还包括:
第三执行模块,用于若所述数据库SQL语句中不存在所述去重关键字,则执行所述数据库SQL语句。
进一步的,若所述数据库SQL语句中存在所述分组统计数据子句,则执行所述数据库SQL语句。
进一步的,所述去重关键字为DISTINCT。
进一步的,所述分组子句包括:GROUP BY子句。
进一步的,所述分组统计数据子句包括:GROUP BY ROLLUP子句和/或GROUP BYCUBE子句。
本发明实施例通过获取用户输入的数据库SQL语句;若数据库SQL语句中存在查询项,则依次判断数据库SQL语句中是否存在去重关键字和分组子句;若数据库SQL语句中存在去重关键字和分组子句,则获取数据库SQL语句中的分组项;若查询项包含数据库SQL语句中的全部分组项,则判断数据库SQL语句中是否存在分组统计数据子句;若数据库SQL语句中不存在分组统计数据子句,则将数据库SQL语句中的去重关键字删除生成新的数据库SQL语句,并执行新的数据库SQL语句,能够实现检测出可以进行消除DISTINCT关键字的数据库SQL语句,并对检测出的数据库SQL语句进行优化的效果。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1是本发明实施例一中的一种数据库SQL语句优化方法的流程图;
图2是本发明实施例二中的一种数据库SQL语句优化方法的流程图;
图3是本发明实施例三中的一种数据库SQL语句优化方法的流程图;
图4是本发明实施例四中的一种数据库SQL语句优化装置的结构示意图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
实施例一
图1为本发明实施例一中的一种数据库SQL语句优化方法的流程图,本实施例可适用于数据库SQL语句优化的情况,该方法可以由本发明实施例中的一种数据库SQL语句优化装置来执行,该装置可采用软件和/或硬件的方式实现,如图1所示,该方法具体包括如下步骤:
S110,获取用户输入的数据库SQL语句。
其中,SQL(Structured Query Language,结构化查询语言)是一种查询功能很强的语言,只要是数据库存在的数据,总能通过适当的方法将它从数据库中查找出来。
具体的,用户输入SQL语句,获取用户输入的SQL语句,并对SQL语句进行词法和语法分析,例如可以是,将SQL语句分段,并逐段对SQL语句进行分析。
S120,判断数据库SQL语句中是否存在查询项,若是,则执行S130。
其中,所述查询项是通过语法解析器对输入的SQL语句进行解析得到的,具体的,指在SQL语句中位于SELECT后面除了一些特定关键字外、用逗号隔开的各项,可以是列、常数、聚集函数、类型转换函数或基本运算等。
具体的,判断数据库SQL语句中是否存在查询项可以通过判断是否存在以SELECT为开头的SQL语句,例如可以是:SELECT DISTINCT C1,SUM(C2)FROM TAB1 GROUP BY C1;则上述SQL语句中的查询项为C1和SUM(C2)。
S130,依次判断数据库SQL语句中是否存在去重关键字和分组子句,若是,则执行S140。
其中,所述去重关键字为用于实现去重功能的SQL语句中的关键字,例如可以是,DISTINCT。DISTINCT支持单列、多列的去重方式。单列去重的方式简明易懂,即相同值只保留1个。多列的去重则是根据指定的去重的列信息来进行,即只有所有指定的列信息都相同,才会被认为是重复的信息。
其中,所述分组子句为用于将相同的分为一组,例如可以是,GROUP BY,GROUP BY语句从英文的字面意义上理解就是“根据(BY)一定的规则进行分组(GROUP)”。
具体的,先判断用户输入的SQL语句中是否存在DISTINCT关键字和GROUP BY子句,例如可以是,先判断用户输入的SQL语句中是否存在DISTINCT关键字,若用户输入的SQL语句中存在DISTINCT关键字,则再判断用户输入的SQL语句中是否存在GROUP BY子句,也可以先判断用户输入的SQL语句中是否存在GROUP BY子句,若存在,再判断用户输入的SQL语句中是否存在DISTINCT关键字,本发明实施例对上述步骤的发生顺序不进行限制。
S140,获取数据库SQL语句中的分组项。
其中,所述分组项为分组子句后面的项,例如可以是:数据库SQL语句为SELECTDISTINCT C1,SUM(C2)FROM TAB1 GROUP BY C1;则上述SQL语句中的分组项为C1。
S150,判断查询项中是否包含数据库SQL语句中的全部分组项,若是,则执行S160。
具体的,在获取到SQL语句中的全部分组项之后,判断SQL语句中的全部分组项是否包含在查询项中,例如可以是,数据库SQL语句为SELECT DISTINCT C1,SUM(C2)FROMTAB1 GROUP BY C1;上述语句中查询项为C1和SUM(C2),分组项为C1,上述语句中查询项包含全部分组项。若数据库SQL语句为SELECT DISTINCT SUM(C2)FROM TAB1 GROUP BY C1;上述语句中查询项为SUM(C2),分组项为C1,上述语句中查询项不包含全部分组项。
S160,判断数据库SQL语句中是否存在分组统计数据子句,若否,则执行S170。
其中,所述分组统计数据子句为用于进行分组统计的SQL语句,例如可以是,GROUPBY ROLLUP子句或GROUP BY CUBE子句,GROUP BY后带ROLLUP子句的功能可以理解为:先按一定的规则产生多种分组,然后按各种分组统计数据(至于统计出的数据是求和还是最大值还是平均值等这就取决于SELECT后的聚合函数)。GROUP BY后带ROLLUP子句与GROUP BY后带CUBE子句的唯一区别就是:带CUBE子句的GROUP BY会产生更多的分组统计数据。CUBE后的列有多少种组合(注意组合是与顺序无关的)就会有多少种分组。
具体的,判断数据库SQL语句中是否存在分组统计数据子句的方式可以为判断以SELECT开头的SQL语句中是否存在GROUP BY ROLLUP子句或GROUP BY CUBE子句,或者,在确定以SELECT开头的SQL语句中存在GROUP BY子句之后,继续判断数据库SQL语句中是否存在ROLLUP或者CUBE子句。
S170,将数据库SQL语句中的去重关键字删除生成新的数据库SQL语句,并执行新的数据库SQL语句。
其中,DISTINCT简单来说就是用来去重的,而GROUP BY的设计目的则是用来聚合统计的,两者在能够实现的功能上有些相同之处,GROUP BY使用的频率相对较高,若同时存在GROUP BY和DISTINCT,则可以将数据库SQL语句中的DISTINCT删除。
具体的,在当前通用的数据库技术中,为了实现去除重复数据的效果,不管语句所对应的表结构和数据特征,都需要将表中的数据取出来,按照DISTINCT子句中指定的去重项来计算。但是,在存在GROUP BY子句的情况下,是不需要经过“计算去重”这一步骤也可以得到相同结果的,跳过“计算去重”这一步骤,进而达到提升处理效率的目的。
需要说明的是,步骤130中判断数据库SQL语句中是否存在分组子句、步骤150中判断查询项中是否包含数据库SQL语句中的全部分组项以及步骤160中判断数据库SQL语句中是否存在分组统计数据子句并不限定其先后顺序,可以为先判断数据库SQL语句中是否存在分组子句,再确定数据库SQL语句中存在分组子句的时候再判断数据库SQL语句中是否存在分组统计数据子句,然后再判断查询项中是否包含数据库SQL语句中的全部分组项。也可以为先判断数据库SQL语句中是否存在分组统计数据子句,然后在确定数据库SQL语句中不包含分组统计数据子句之后,再确定数据库SQL语句中是否存在分组子句,然后再判断查询项中是否包含数据库SQL语句中的全部分组项,本发明实施例对上述步骤的顺序不进行限制。
本发明实施例的技术方案,通过获取用户输入的数据库SQL语句;若数据库SQL语句中存在查询项,则依次判断数据库SQL语句中是否存在去重关键字和分组子句;若数据库SQL语句中存在去重关键字和分组子句,则获取数据库SQL语句中的分组项;若查询项包含数据库SQL语句中的全部分组项,则判断数据库SQL语句中是否存在分组统计数据子句;若数据库SQL语句中不存在分组统计数据子句,则将数据库SQL语句中的去重关键字删除生成新的数据库SQL语句,并执行新的数据库SQL语句,能够实现检测出可以进行消除DISTINCT关键字的数据库SQL语句,并对检测出的数据库SQL语句进行优化的效果。
实施例二
图2为本发明实施例二中的一种数据库SQL语句优化方法的流程图,本实施例以上述实施例一为基础进行优化,在本实施例中,还包括:若所述数据库SQL语句中存在去重关键字,且不存在所述分组子句,则判断所述查询项中是否存在聚集函数;若所述查询项中存在所述聚集函数,则将所述数据库SQL语句中的去重关键字删除生成新的数据库SQL语句,并执行所述新的数据库SQL语句。
如图2所示,本实施例的方法具体包括如下步骤:
S210,获取用户输入的数据库SQL语句。
S220,判断数据库SQL语句中是否存在查询项,若是,则执行S230。
S230,判断数据库SQL语句中是否存在去重关键字,若是,则执行S240。
S240,判断数据库SQL语句中是否存在分组子句,若否,则执行S250。
S250,判断查询项中是否存在聚集函数,若是,则执行S260。
其中,所述聚集函数为SUM函数、MAX函数、COUNT函数、AVG函数、MIN函数、VAR_POP函数、VAR_SAMP函数、VARIANCE函数、STDDEV_POP函数、STDDEV_SAMP函数、STDDEV函数、OVAR_POP函数、COVAR_SAMP函数、CORR函数、AREA_MAX函数或者LISTAGG函数中的一个或多个。
其中,判断以SELECT开头的SQL语句中是否存在分组子句:GROUP BY,若以SELECT开头的SQL语句中不存在分组子句:GROUP BY,则判断查询项中是否存在上述聚集函数中的一种或多种。
具体的,在确定以SELECT开头的SQL语句中不存在分组子句:GROUP BY之后,判断查询项中是否存在SUM函数、MAX函数、COUNT函数、AVG函数、MIN函数、VAR_POP函数、VAR_SAMP函数、VARIANCE函数、STDDEV_POP函数、STDDEV_SAMP函数、STDDEV函数、OVAR_POP函数、COVAR_SAMP函数、CORR函数、AREA_MAX函数或者LISTAGG函数中的一种或者多种。
S260,将数据库SQL语句中的去重关键字删除生成新的数据库SQL语句,并执行新的数据库SQL语句。
具体的,若查询项中存在SUM函数、MAX函数、COUNT函数、AVG函数和MIN函数、VAR_POP函数、VAR_SAMP函数、VARIANCE函数、STDDEV_POP函数、STDDEV_SAMP函数、STDDEV函数、OVAR_POP函数、COVAR_SAMP函数、CORR函数、AREA_MAX函数或者LISTAGG函数中的一种或者多种,则将数据库SQL语句中的去重关键字删除,生成新的数据库SQL语句,并执行新的数据库SQL语句。
在一个具体的例子中,在用户输入数据库SQL语句后,获取用户输入的数据库SQL语句,通过判断数据库SQL语句中是否以SELECT开头判断数据库SQL语句中是否存在查询项,若数据库SQL语句中存在查询项,则继续判断数据库SQL语句中是否存在DISTINCT关键字,若数据库SQL语句中存在DISTINCT关键字,则继续判断数据库SQL语句中是否存在GROUPBY子句,若数据库SQL语句中不包含GROUP BY子句,则判断查询项中是否存在聚集函数,若查询项中存在SUM函数、MAX函数、COUNT函数、AVG函数、MIN函数、VAR_POP函数、VAR_SAMP函数、VARIANCE函数、STDDEV_POP函数、STDDEV_SAMP函数、STDDEV函数、OVAR_POP函数、COVAR_SAMP函数、CORR函数、AREA_MAX函数或者LISTAGG函数中的一种或者多种,则将数据库SQL语句中的DISTINCT关键字删除生成新的数据库SQL语句,并执行新的数据库SQL语句。
本发明实施例的技术方案,通过获取用户输入的数据库SQL语句;若数据库SQL语句中存在查询项,则依次判断数据库SQL语句中是否存在去重关键字和分组子句;若数据库SQL语句中存在去重关键字,且不存在分组子句,则判断查询项中是否存在聚集函数;若查询项中存在聚集函数,则将数据库SQL语句中的去重关键字删除生成新的数据库SQL语句,并执行新的数据库SQL语句,能够实现检测出可以进行消除DISTINCT关键字的数据库SQL语句,并对检测出的数据库SQL语句进行优化的效果。
实施例三
图3为本发明实施例三中的一种数据库SQL语句优化方法的流程图,本实施例以上述实施例一为基础进行优化。
如图3所示,本实施例的方法具体包括如下步骤:
S310,获取用户输入的数据库SQL语句。
S320,判断所述数据库SQL语句中是否存在查询项,若是,则执行S330,若否,则执行S340。
S330,判断数据库SQL语句中是否存在去重关键字,若是,则执行S350,若否,则执行S340。
S340,执行数据库SQL语句。
S350,判断数据库SQL语句中是否存在分组子句,若是,则执行S360,若否,则执行S390。
S360,获取数据库SQL语句中的分组项。
S370,判断查询项中是否包含数据库SQL语句中的全部分组项,若是,则执行S380,若否,则执行S340。
S380,判断数据库SQL语句中是否存在分组统计数据子句,若是,则执行S340,若否,则执行S391。
S390,判断查询项中是否存在聚集函数,若是,则执行S391,若否,则执行S340。
S391,将数据库SQL语句中的去重关键字删除生成新的数据库SQL语句,并执行新的数据库SQL语句。
可选的,所述去重关键字为DISTINCT。
可选的,所述分组子句包括:GROUP BY子句。
可选的,所述分组统计数据子句包括:GROUP BY ROLLUP子句和/或GROUP BY CUBE子句。
具体地,对用户输入的SQL语句进行词法和语法分析,判断是否存在查询项(SELECT关键字后面的项),若存在查询项,则继续判断SQL语句中是否有DISTINCT关键字,若没有,则不进行语句改写,执行语句。判断SQL语句中是否有GROUP BY子句(分组项),若有,则进一步判断SQL语句是否满足不含有ROLLUP/CUBE子句,且全部分组项被查询项所包含;若没有,则进一步判断查询项中是否包含有聚集函数;若语句满足不含有ROLLUP/CUBE子句,且全部分组项被查询项所包含,则移除原SQL语句中的DISTINCT关键字,执行改写后的语句,若查询项中包含有聚集函数,则移除原SQL语句中的DISTINCT关键字,执行改写后的语句,若不包含,则不进行语句改写,执行语句。
在一个具体的例子中,例如表TAB1的定义如下:
CREATE TABLE TAB1(C1 INT,C2 INT);
则查询语句:
SELECT DISTINCT C1,SUM(C2)FROM TAB1 GROUP BY C1;
可改写为:
SELECT C1,SUM(C2)FROM TAB1 GROUP BY C1;
可以看到,因为查询语句中有GROUP BY C1子句,而去重项C1、SUM(C2)中包含了分组项C1,因此可以保证去重项的唯一性,即不用DISTINCT也是同样的查询结果,所以可以去掉DISTINCT关键字,以省略后面“计算去重”的步骤。这是一个非常简单的例子,数据库实际使用时面对的SQL语句往往非常复杂,本发明实施例的方法能够检测出大部分可以进行消除DISTINCT关键字优化的场景。
本发明实施例对于一条查询语句,如果在根据去重项和其他语句特征能够保证数据没有重复时,则可以将原来的查询语句进行改写,将DISTINCT关键字删除。
本实施例的技术方案,通过获取用户输入的数据库SQL语句;若数据库SQL语句中存在查询项,则判断数据库SQL语句中是否存在去重关键字,若数据库SQL语句中不存在查询项,则执行数据库SQL语句,若数据库SQL语句中存在去重关键字,则判断数据库SQL语句中是否存在分组子句,若存在,则获取数据库SQL语句中的分组项,并判断查询项中是否包含数据库SQL语句中的全部分组项,若包含,则判断数据库SQL语句中是否存分组统计数据子句,若存在,则执行数据库SQL语句,若不存在,则将所述数据库SQL语句中的去重关键字删除生成新的数据库SQL语句,若数据库SQL语句中不存在分组子句,则判断所述查询项中是否存在聚集函数,若存在,则将所述数据库SQL语句中的去重关键字删除生成新的数据库SQL语句,并执行所述新的数据库SQL语句,若不存在,则执行数据库SQL语句,能够实现检测出可以进行消除DISTINCT关键字的数据库SQL语句,并对检测出的数据库SQL语句进行优化的效果。
实施例四
图4为本发明实施例四中的一种数据库SQL语句优化装置的结构示意图。本实施例可适用于数据库SQL语句优化的情况,该装置可采用软件和/或硬件的方式实现,该装置可集成在任何具备数据库SQL语句优化功能的设备中,如图4所示,所述数据库SQL语句优化装置具体包括:获取模块410、第一判断模块420、第二判断模块430、第三判断模块440和第一执行模块450。
其中,获取模块410,用于获取用户输入的数据库SQL语句;
第一判断模块420,用于若所述数据库SQL语句中存在查询项,则依次判断所述数据库SQL语句中是否存在去重关键字和分组子句;
第二判断模块430,用于若所述数据库SQL语句中存在所述去重关键字和所述分组子句,则判断所述数据库SQL语句中是否存在分组统计数据子句;
第三判断模块440,用于若所述查询项包含所述数据库SQL语句中的全部分组项,则判断所述数据库SQL语句中是否存在分组统计数据子句;
第一执行模块450,用于若所述数据库SQL语句中不存在所述分组统计数据子句,则将所述数据库SQL语句中的去重关键字删除生成新的数据库SQL语句,并执行所述新的数据库SQL语句。
可选的,还包括:
第四判断模块,用于若所述数据库SQL语句中存在去重关键字,且不存在所述分组子句,则判断所述查询项中是否存在聚集函数;
第二执行模块,用于若所述查询项中存在所述聚集函数,则将所述数据库SQL语句中的去重关键字删除生成新的数据库SQL语句,并执行所述新的数据库SQL语句。
可选的,还包括:
第三执行模块,用于若所述数据库SQL语句中不存在所述去重关键字,则执行所述数据库SQL语句。
可选的,若所述数据库SQL语句中存在所述分组统计数据子句,则执行所述数据库SQL语句。
可选的,所述去重关键字为DISTINCT。
可选的,所述分组子句包括:GROUP BY子句。
可选的,所述分组统计数据子句包括:GROUP BY ROLLUP子句和/或GROUP BY CUBE子句。
本实施例的技术方案,通过获取用户输入的数据库SQL语句;若数据库SQL语句中存在查询项,则依次判断数据库SQL语句中是否存在去重关键字和分组子句;若数据库SQL语句中存在去重关键字和分组子句,则获取数据库SQL语句中的分组项;若查询项包含数据库SQL语句中的全部分组项,则判断数据库SQL语句中是否存在分组统计数据子句;若数据库SQL语句中不存在分组统计数据子句,则将数据库SQL语句中的去重关键字删除生成新的数据库SQL语句,并执行新的数据库SQL语句,能够实现检测出可以进行消除DISTINCT关键字的数据库SQL语句,并对检测出的数据库SQL语句进行优化的效果。
上述产品可执行本发明任意实施例所提供的方法,具备执行方法相应的功能模块和有益效果。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。
Claims (10)
1.一种数据库SQL语句优化方法,其特征在于,包括:
获取用户输入的数据库SQL语句;
若所述数据库SQL语句中存在查询项,则依次判断所述数据库SQL语句中是否存在去重关键字和分组子句;
若所述数据库SQL语句中存在所述去重关键字和所述分组子句,则获取所述数据库SQL语句中的分组项;
若所述查询项包含所述数据库SQL语句中的全部分组项,则判断所述数据库SQL语句中是否存在分组统计数据子句;
若所述数据库SQL语句中不存在所述分组统计数据子句,则将所述数据库SQL语句中的去重关键字删除生成新的数据库SQL语句,并执行所述新的数据库SQL语句。
2.根据权利要求1所述的方法,其特征在于,还包括:
若所述数据库SQL语句中存在去重关键字,且不存在所述分组子句,则判断所述查询项中是否存在聚集函数;
若所述查询项中存在所述聚集函数,则将所述数据库SQL语句中的去重关键字删除生成新的数据库SQL语句,并执行所述新的数据库SQL语句。
3.根据权利要求1所述的方法,其特征在于,还包括:
若所述数据库SQL语句中不存在所述去重关键字,则执行所述数据库SQL语句。
4.根据权利要求1所述的方法,其特征在于,若所述数据库SQL语句中存在所述分组统计数据子句,则执行所述数据库SQL语句。
5.根据权利要求1所述的方法,其特征在于,所述去重关键字为DISTINCT。
6.根据权利要求1所述的方法,其特征在于,所述分组子句包括:GROUPBY子句。
7.根据权利要求1所述的方法,其特征在于,所述分组统计数据子句包括:GROUP BYROLLUP子句和/或GROUP BY CUBE子句。
8.一种数据库SQL语句优化装置,其特征在于,包括:
获取模块,用于获取用户输入的数据库SQL语句;
第一判断模块,用于若所述数据库SQL语句中存在查询项,则依次判断所述数据库SQL语句中是否存在去重关键字和分组子句;
第二判断模块,用于若所述数据库SQL语句中存在所述去重关键字和所述分组子句,则获取所述数据库SQL语句中的分组项;
第三判断模块,用于若所述查询项包含所述数据库SQL语句中的全部分组项,则判断所述数据库SQL语句中是否存在分组统计数据子句;
第一执行模块,用于若所述数据库SQL语句中不存在所述分组统计数据子句,则将所述数据库SQL语句中的去重关键字删除生成新的数据库SQL语句,并执行所述新的数据库SQL语句。
9.根据权利要求8所述的装置,其特征在于,还包括:
第四判断模块,用于若所述数据库SQL语句中存在去重关键字,且不存在所述分组子句,则判断所述查询项中是否存在聚集函数;
第二执行模块,用于若所述查询项中存在所述聚集函数,则将所述数据库SQL语句中的去重关键字删除生成新的数据库SQL语句,并执行所述新的数据库SQL语句。
10.根据权利要求8所述的装置,其特征在于,还包括:
第三执行模块,用于若所述数据库SQL语句中不存在所述去重关键字,则执行所述数据库SQL语句。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810381164.1A CN108628975B (zh) | 2018-04-25 | 2018-04-25 | 一种数据库sql语句优化方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810381164.1A CN108628975B (zh) | 2018-04-25 | 2018-04-25 | 一种数据库sql语句优化方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108628975A true CN108628975A (zh) | 2018-10-09 |
CN108628975B CN108628975B (zh) | 2020-08-21 |
Family
ID=63694560
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810381164.1A Active CN108628975B (zh) | 2018-04-25 | 2018-04-25 | 一种数据库sql语句优化方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108628975B (zh) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109753490A (zh) * | 2018-12-13 | 2019-05-14 | 深圳壹账通智能科技有限公司 | 基于漏洞修复的数据库优化方法、系统、设备及介质 |
CN109947791A (zh) * | 2019-03-27 | 2019-06-28 | 上海达梦数据库有限公司 | 一种数据库语句优化方法、装置、设备及存储介质 |
CN110222071A (zh) * | 2019-06-06 | 2019-09-10 | 上海达梦数据库有限公司 | 一种数据查询方法、装置、服务器及存储介质 |
CN110704472A (zh) * | 2019-08-27 | 2020-01-17 | 北京数知科技股份有限公司 | 数据查询统计方法及装置 |
CN110968593A (zh) * | 2019-12-10 | 2020-04-07 | 上海达梦数据库有限公司 | 数据库sql语句优化方法、装置、设备和存储介质 |
CN111125151A (zh) * | 2019-12-26 | 2020-05-08 | 上海达梦数据库有限公司 | Mpp架构下聚集函数的执行方法和数据库系统 |
CN111309753A (zh) * | 2020-01-21 | 2020-06-19 | 上海达梦数据库有限公司 | 结构化查询语句的优化方法、装置、设备及存储介质 |
CN112579635A (zh) * | 2019-09-30 | 2021-03-30 | 北京国双科技有限公司 | 一种sql语句的优化方法、装置、电子设备及存储介质 |
CN114428789A (zh) * | 2022-04-06 | 2022-05-03 | 中国工商银行股份有限公司 | 数据的处理方法及装置 |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5615361A (en) * | 1995-02-07 | 1997-03-25 | International Business Machines Corporation | Exploitation of uniqueness properties using a 1-tuple condition for the optimization of SQL queries |
US5713015A (en) * | 1996-05-30 | 1998-01-27 | International Business Machines Corporation | Reordering of complex SQL queries involving GROUPBYs, joins, outer joins and full outer joins |
US20060161515A1 (en) * | 2005-01-14 | 2006-07-20 | International Business Machines Corporation | Apparatus and method for SQL distinct optimization in a computer database system |
US20090024654A1 (en) * | 2007-07-19 | 2009-01-22 | Microsoft Corporation | Multi-value property storage and query support |
US20100131540A1 (en) * | 2008-11-25 | 2010-05-27 | Yu Xu | System, method, and computer-readable medium for optimizing processing of distinct and aggregation queries on skewed data in a database system |
CN104303176A (zh) * | 2012-05-15 | 2015-01-21 | 惠普发展公司,有限责任合伙企业 | 查询处理 |
CN104504154A (zh) * | 2015-01-14 | 2015-04-08 | 曙光信息产业(北京)有限公司 | 一种数据聚合查询的方法及装置 |
CN104714974A (zh) * | 2013-12-17 | 2015-06-17 | 航天信息股份有限公司 | 一种查询语句解析与再处理的方法和装置 |
CN104933190A (zh) * | 2015-07-10 | 2015-09-23 | 上海新炬网络信息技术有限公司 | 一种sql语句执行频次动态调整方法 |
US20170031984A1 (en) * | 2015-07-31 | 2017-02-02 | International Business Machines Corporation | Outer join optimizations in database management systems |
-
2018
- 2018-04-25 CN CN201810381164.1A patent/CN108628975B/zh active Active
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5615361A (en) * | 1995-02-07 | 1997-03-25 | International Business Machines Corporation | Exploitation of uniqueness properties using a 1-tuple condition for the optimization of SQL queries |
US5713015A (en) * | 1996-05-30 | 1998-01-27 | International Business Machines Corporation | Reordering of complex SQL queries involving GROUPBYs, joins, outer joins and full outer joins |
US20060161515A1 (en) * | 2005-01-14 | 2006-07-20 | International Business Machines Corporation | Apparatus and method for SQL distinct optimization in a computer database system |
US20090024654A1 (en) * | 2007-07-19 | 2009-01-22 | Microsoft Corporation | Multi-value property storage and query support |
US20100131540A1 (en) * | 2008-11-25 | 2010-05-27 | Yu Xu | System, method, and computer-readable medium for optimizing processing of distinct and aggregation queries on skewed data in a database system |
CN104303176A (zh) * | 2012-05-15 | 2015-01-21 | 惠普发展公司,有限责任合伙企业 | 查询处理 |
CN104714974A (zh) * | 2013-12-17 | 2015-06-17 | 航天信息股份有限公司 | 一种查询语句解析与再处理的方法和装置 |
CN104504154A (zh) * | 2015-01-14 | 2015-04-08 | 曙光信息产业(北京)有限公司 | 一种数据聚合查询的方法及装置 |
CN104933190A (zh) * | 2015-07-10 | 2015-09-23 | 上海新炬网络信息技术有限公司 | 一种sql语句执行频次动态调整方法 |
US20170031984A1 (en) * | 2015-07-31 | 2017-02-02 | International Business Machines Corporation | Outer join optimizations in database management systems |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109753490A (zh) * | 2018-12-13 | 2019-05-14 | 深圳壹账通智能科技有限公司 | 基于漏洞修复的数据库优化方法、系统、设备及介质 |
CN109947791A (zh) * | 2019-03-27 | 2019-06-28 | 上海达梦数据库有限公司 | 一种数据库语句优化方法、装置、设备及存储介质 |
CN110222071A (zh) * | 2019-06-06 | 2019-09-10 | 上海达梦数据库有限公司 | 一种数据查询方法、装置、服务器及存储介质 |
CN110704472A (zh) * | 2019-08-27 | 2020-01-17 | 北京数知科技股份有限公司 | 数据查询统计方法及装置 |
CN112579635A (zh) * | 2019-09-30 | 2021-03-30 | 北京国双科技有限公司 | 一种sql语句的优化方法、装置、电子设备及存储介质 |
CN110968593A (zh) * | 2019-12-10 | 2020-04-07 | 上海达梦数据库有限公司 | 数据库sql语句优化方法、装置、设备和存储介质 |
CN110968593B (zh) * | 2019-12-10 | 2023-10-03 | 上海达梦数据库有限公司 | 数据库sql语句优化方法、装置、设备和存储介质 |
CN111125151A (zh) * | 2019-12-26 | 2020-05-08 | 上海达梦数据库有限公司 | Mpp架构下聚集函数的执行方法和数据库系统 |
CN111125151B (zh) * | 2019-12-26 | 2023-05-12 | 上海达梦数据库有限公司 | Mpp架构下聚集函数的执行方法和数据库系统 |
CN111309753A (zh) * | 2020-01-21 | 2020-06-19 | 上海达梦数据库有限公司 | 结构化查询语句的优化方法、装置、设备及存储介质 |
CN111309753B (zh) * | 2020-01-21 | 2024-02-06 | 上海达梦数据库有限公司 | 结构化查询语句的优化方法、装置、设备及存储介质 |
CN114428789A (zh) * | 2022-04-06 | 2022-05-03 | 中国工商银行股份有限公司 | 数据的处理方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN108628975B (zh) | 2020-08-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108628975A (zh) | 一种数据库sql语句优化方法及装置 | |
US10545999B2 (en) | Building features and indexing for knowledge-based matching | |
US7650330B1 (en) | Information extraction from a database | |
US9779141B2 (en) | Query techniques and ranking results for knowledge-based matching | |
US7337167B2 (en) | Estimating a number of rows returned by a recursive query | |
US8892580B2 (en) | Transformation of regular expressions | |
EP1693770A2 (en) | Query spelling correction method and system | |
CN112579155B (zh) | 代码相似性检测方法、装置以及存储介质 | |
CN109522341B (zh) | 实现基于sql的流式数据处理引擎的方法、装置、设备 | |
Kim et al. | R3F: RDF triple filtering method for efficient SPARQL query processing | |
CN112100198B (zh) | 数据库sql语句优化方法、装置、设备及存储介质 | |
CN112035508A (zh) | 基于sql在线元数据解析的方法及系统、设备 | |
US20080133461A1 (en) | Optimization of left and right outer join operations in database management systems | |
US7085760B2 (en) | Data query differential analysis | |
US20030033138A1 (en) | Method for partitioning a data set into frequency vectors for clustering | |
Rabatel et al. | Mining sequential patterns: a context-aware approach | |
US7174553B1 (en) | Increasing parallelism of function evaluation in a database | |
Rabatel et al. | Contextual sequential pattern mining | |
Pan et al. | Vector Database Management Techniques and Systems | |
CN117056347A (zh) | Sql语句永真式注入检测方法、装置、计算机设备及存储介质 | |
CN107633094B (zh) | 一种集群环境中数据检索的方法和装置 | |
Qi et al. | Streaming algorithms for estimating high set similarities in loglog space | |
CN114666078B (zh) | Sql注入攻击的检测方法及系统、电子设备及存储介质 | |
CN114398428A (zh) | 一种数据分析方法、装置、设备及存储介质 | |
CN113934430A (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 |