CN108628975A - 一种数据库sql语句优化方法及装置 - Google Patents

一种数据库sql语句优化方法及装置 Download PDF

Info

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
Application number
CN201810381164.1A
Other languages
English (en)
Other versions
CN108628975B (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 CN201810381164.1A priority Critical patent/CN108628975B/zh
Publication of CN108628975A publication Critical patent/CN108628975A/zh
Application granted granted Critical
Publication of CN108628975B publication Critical patent/CN108628975B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

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语句优化方法及装置。
背景技术
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语句。
CN201810381164.1A 2018-04-25 2018-04-25 一种数据库sql语句优化方法及装置 Active CN108628975B (zh)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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

Patent Citations (10)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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