CN112559554B - 一种查询语句优化方法及装置 - Google Patents
一种查询语句优化方法及装置 Download PDFInfo
- Publication number
- CN112559554B CN112559554B CN202011555423.1A CN202011555423A CN112559554B CN 112559554 B CN112559554 B CN 112559554B CN 202011555423 A CN202011555423 A CN 202011555423A CN 112559554 B CN112559554 B CN 112559554B
- Authority
- CN
- China
- Prior art keywords
- index
- optimization
- data table
- target data
- optimized
- 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
- 238000005457 optimization Methods 0.000 title claims abstract description 196
- 238000000034 method Methods 0.000 title claims abstract description 49
- 238000004590 computer program Methods 0.000 claims description 8
- 230000000694 effects Effects 0.000 abstract description 6
- 230000006870 function Effects 0.000 description 13
- 238000010586 diagram Methods 0.000 description 5
- 238000004891 communication Methods 0.000 description 4
- 238000004364 calculation method Methods 0.000 description 3
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 230000008569 process Effects 0.000 description 3
- 238000012545 processing Methods 0.000 description 2
- 238000011160 research Methods 0.000 description 2
- 238000006467 substitution reaction Methods 0.000 description 2
- 230000015556 catabolic process Effects 0.000 description 1
- 238000007796 conventional method Methods 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 230000014509 gene expression Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/242—Query formulation
- G06F16/2433—Query languages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2282—Tablespace storage structures; Management thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2453—Query optimisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/28—Databases characterised by their database models, e.g. relational or object models
- G06F16/284—Relational databases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/20—Natural language analysis
- G06F40/205—Parsing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/20—Natural language analysis
- G06F40/253—Grammatical analysis; Style critique
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Health & Medical Sciences (AREA)
- Artificial Intelligence (AREA)
- Audiology, Speech & Language Pathology (AREA)
- General Health & Medical Sciences (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本公开提供了一种查询语句优化方法及装置,其中,该方法包括:获取待优化的结构化查询语言SQL语句,并确定所述SQL语句的语法结构;基于所述语法结构以及预设的语法优化规则,对所述SQL语句进行语法优化,得到优化SQL语句;获取所述优化SQL语句在目标数据库下的执行计划、所述执行计划对应的目标数据表的结构信息以及所述目标数据表对应的索引相关信息;基于所述执行计划、所述结构信息以及所述索引相关信息,对所述目标数据表进行针对所述优化SQL语句的索引优化。本公开实施例能够实现针对SQL语句的多方位自动优化,使优化查询语句的效率提高,并提升优化的效果,进而使优化后的SQL语句能够被MySQL更快的执行。
Description
技术领域
本公开涉及计算机技术领域,具体而言,涉及一种查询语句优化方法及装置。
背景技术
MySQL是一个关系型数据库管理系统,通过使用查询语句,能够在MySQL中进行数据的查询。查询语句通常是基于结构化查询语言(Structured Query Language,SQL)的,用户可以针对需要查询的数据,输入SQL语言,MySQL在获取到SQL语句后,可以生成该SQL语句的执行计划,并按照执行计划执行该SQL语句。
在实际的应用当中,一些SQL语句的执行时占用的计算资源可能较高,执行这些SQL语句所消耗的时间也较长,该类SQL语句在运行时的效率较低,若长时间运行,还可能对MySQL造成过大的压力,导致MySQL出现报错、崩溃等情况。
发明内容
本公开实施例至少提供一种查询语句优化方法及装置。
第一方面,本公开实施例提供了一种查询语句优化方法,包括:
获取待优化的结构化查询语言SQL语句,并确定所述SQL语句的语法结构;
基于所述语法结构以及预设的语法优化规则,对所述SQL语句进行语法优化,得到优化SQL语句;
获取所述优化SQL语句在目标数据库下的执行计划、所述执行计划对应的目标数据表的结构信息以及所述目标数据表对应的索引相关信息;
基于所述执行计划、所述结构信息以及所述索引相关信息,对所述目标数据表进行针对所述优化SQL语句的索引优化。
一种可选的实施方式中,确定所述SQL语句的语法结构,包括:
利用预设的解析器,确定所述SQL语句中每个词语的类型;
基于所述SQL语句中每个词语的类型以及预设的SQL语法规则,生成所述SQL语句的语法树,得到所述SQL语句的语法结构。
一种可选的实施方式中,基于所述语法结构以及预设的语法优化规则,对所述SQL语句进行语法优化,得到优化SQL语句,包括:
基于所述语法结构,从所述SQL语句中查找与所述语法优化规则匹配的至少一个待优化字段;
将所述待优化字段替换为与所述语法优化规则对应的优化字段,得到所述优化SQL语句。
一种可选的实施方式中,所述基于所述执行计划、所述结构信息以及所述索引相关信息,对所述目标数据表进行针对所述优化SQL语句的索引优化,包括:
基于所述执行计划中目标数据表的联接顺序,确定所述目标数据表的索引优化顺序;
按照所述索引优化顺序,基于所述结构信息以及所述索引相关信息,依次对所述目标数据表进行针对所述优化SQL语句的索引优化。
一种可选的实施方式中,基于所述结构信息以及所述索引相关信息,对所述目标数据表进行针对所述优化SQL语句的索引优化,包括:
基于所述优化SQL语句的结构信息,对所述优化SQL语句的各个字段进行聚类;
基于聚类结果以及所述目标数据表的结构信息,确定所述目标数据表中的至少一个候选索引列;
基于所述结构信息以及所述索引相关信息,分别计算利用所述候选索引列对应的索引执行所述优化SQL语句的查询代价,并基于所述查询代价确定所述目标索引列;
基于所述目标索引列,生成所述目标数据表的索引优化建议。
一种可选的实施方式中,在基于所述目标索引列,生成所述目标数据表的索引优化建议之后,所述方法还包括:
对采用所述索引优化建议后的目标数据表进行覆盖索引优化,生成所述目标数据表的覆盖索引优化建议。
一种可选的实施方式中,在生成所述目标数据表的覆盖索引优化建议之后,所述方法还包括:
对采取所述覆盖优化建议后的目标数据表进行冗余索引优化,生成所述目标数据表的冗余索引优化建议。
第二方面,本公开实施例还提供一种查询语句优化装置,包括:
确定模块,用于获取待优化的结构化查询语言SQL语句,并确定所述SQL语句的语法结构;
第一优化模块,用于基于所述语法结构以及预设的语法优化规则,对所述SQL语句进行语法优化,得到优化SQL语句;
获取模块,用于获取所述优化SQL语句在目标数据库下的执行计划、所述执行计划对应的目标数据表的结构信息以及所述目标数据表对应的索引相关信息;
第二优化模块,用于基于所述执行计划、所述结构信息以及所述索引相关信息,对所述目标数据表进行针对所述优化SQL语句的索引优化。
一种可选的实施方式中,所述确定模块在确定所述SQL语句的语法结构时,具体用于:
利用预设的解析器,确定所述SQL语句中每个词语的类型;
基于所述SQL语句中每个词语的类型以及预设的SQL语法规则,生成所述SQL语句的语法树,得到所述SQL语句的语法结构。
一种可选的实施方式中,所述第一优化模块具体用于:
基于所述语法结构,从所述SQL语句中查找与所述语法优化规则匹配的至少一个待优化字段;
将所述待优化字段替换为与所述语法优化规则对应的优化字段,得到所述优化SQL语句。
一种可选的实施方式中,所述第二优化模块具体用于:
基于所述执行计划中目标数据表的联接顺序,确定所述目标数据表的索引优化顺序;
按照所述索引优化顺序,基于所述结构信息以及所述索引相关信息,依次对所述目标数据表进行针对所述优化SQL语句的索引优化。
一种可选的实施方式中,所述第二优化模块在基于所述结构信息以及所述索引相关信息,对所述目标数据表进行针对所述优化SQL语句的索引优化时,具体用于:
基于所述优化SQL语句的结构信息,对所述优化SQL语句的各个字段进行聚类;
基于聚类结果以及所述目标数据表的结构信息,确定所述目标数据表中的至少一个候选索引列;
基于所述结构信息以及所述索引相关信息,分别计算利用所述候选索引列对应的索引执行所述优化SQL语句的查询代价,并基于所述查询代价确定所述目标索引列;
基于所述目标索引列,生成所述目标数据表的索引优化建议。
一种可选的实施方式中,在基于所述目标索引列,生成所述目标数据表的索引优化建议之后,所述第二优化模块还用于:
对采用所述索引优化建议后的目标数据表进行覆盖索引优化,生成所述目标数据表的覆盖索引优化建议。
一种可选的实施方式中,在生成所述目标数据表的覆盖索引优化建议之后,所述第二优化模块还用于:
对采取所述覆盖优化建议后的目标数据表进行冗余索引优化,生成所述目标数据表的冗余索引优化建议。
第三方面,本公开实施例还提供一种电子设备,包括:处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当电子设备运行时,所述处理器与所述存储器之间通过总线通信,所述机器可读指令被所述处理器执行时执行上述第一方面,或第一方面中任一种可能的实施方式中的步骤。
第四方面,本公开实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述第一方面,或第一方面中任一种可能的实施方式中的步骤。
本公开实施例提供的查询语句优化方法及装置,首先获取待优化的结构化查询语言SQL语句,并确定所述SQL语句的语法结构;然后,基于所述语法结构以及预设的语法优化规则,对所述SQL语句进行语法优化,得到优化SQL语句;之后,获取所述优化SQL语句在目标数据库下的执行计划、所述执行计划对应的目标数据表的结构信息以及所述目标数据表对应的索引相关信息;最后,基于所述执行计划、所述结构信息以及所述索引相关信息,对所述目标数据表进行针对所述优化SQL语句的索引优化。本公开实施例能够在对SQL语句本身优化的同时,对SQL语句对应的数据表进行索引优化,实现针对SQL语句的多方位自动优化,使优化查询语句的效率提高,并提升优化的效果,进而使优化后的SQL语句能够被MySQL更快的执行。
为使本公开的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本公开实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,此处的附图被并入说明书中并构成本说明书中的一部分,这些附图示出了符合本公开的实施例,并与说明书一起用于说明本公开的技术方案。应当理解,以下附图仅示出了本公开的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1示出了本公开实施例所提供的一种查询语句优化方法的流程图;
图2示出了本公开实施例所提供的查询语句优化方法中,SQL语句的语法结构的示意图;
图3示出了本公开实施例所提供的一种查询语句优化装置的示意图;
图4示出了本公开实施例所提供的一种电子设备的示意图。
具体实施方式
为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例中附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本公开实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本公开的实施例的详细描述并非旨在限制要求保护的本公开的范围,而是仅仅表示本公开的选定实施例。基于本公开的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
本文中术语“和/或”,仅仅是描述一种关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中术语“至少一种”表示多种中的任意一种或多种中的至少两种的任意组合,例如,包括A、B、C中的至少一种,可以表示包括从A、B和C构成的集合中选择的任意一个或多个元素。
经研究发现,目前对SQL语句进行优化的方法需要工作人员进行人工优化,优化的效率较低,优化效果也十分依赖工作人员的主观判断,并且优化的方式通常为针对SQL语句本身的优化,仅能对SQL语句本身的问题,如语法错误、语句内容繁赘等进行优化,不能够针对数据库端造成的执行缓慢进行优化。
基于上述研究,本公开提供了一种查询语句优化方法,能够在对SQL语句本身优化的同时,对SQL语句对应的数据表进行索引优化,实现针对SQL语句的多方位自动优化,使优化查询语句的效率提高,并提升优化的效果,进而使优化后的SQL语句能够被MySQL更快的执行。
为便于对本实施例进行理解,首先对本公开实施例所公开的一种查询语句优化方法进行详细介绍,本公开实施例所提供的查询语句优化方法的执行主体一般为具有一定计算能力的计算机设备,该计算机设备例如包括:终端设备或服务器或其它处理设备。在一些可能的实现方式中,该查询语句优化方法可以通过处理器调用存储器中存储的计算机可读指令的方式来实现。
参见图1所示,为本公开实施例提供的查询语句优化方法的流程图,所述方法包括步骤S101~S104,其中:
S101:获取待优化的结构化查询语言SQL语句,并确定所述SQL语句的语法结构。
该步骤中,待优化的SQL语句可以由用户提供,也可以从预设的数据库中获取,比如,MySQL在执行SQL语句的过程中,可以判断执行的SQL语句是否需要进行优化,若需要优化则将其存储至预设的数据库中。
示例性的,MySQL可以将慢查询的SQL语句作为待优化的SQL语句,慢查询可以为超过预设查询时长的查询,MySQL可以将待优化的SQL语句利用分号进行分隔,并对每个待优化的SQL语句添加注释,注释的内容可以为该SQL语句对应的数据库的地址以及访问该数据库所需的用户名、密码,用于获取该数据库对应的信息。
在获取到待优化的SQL语句后,可以对SQL语句进行解析,得到SQL语句的语法结构。
一些可能的实施方式中,所述确定所述SQL语句的语法结构,包括:
利用预设的解析器,确定所述SQL语句中每个词语的类型;
基于所述SQL语句中每个词语的类型以及预设的SQL语法规则,生成所述SQL语句的语法树,得到所述SQL语句的语法结构。
其中,预设的解析器可以为SQL解析器,得到的语法结构可以为SQL语句的语法树,具有树状结构。参见图2所示,为本公开实施例所提供的查询语句优化方法中,SQL语句的语法结构的示意图,语法结构可以含有多个节点,语法树中每个分支可以按照SQL语句中各个字段的类型进行分类。比如,SQL语句为Select语句,其分支可以包括Fields分支,Fields分支下包含FieldName和Function()的节点,在Function节点下,还可以包含SQL语句中各个Function的具体内容。
S102:基于所述语法结构以及预设的语法优化规则,对所述SQL语句进行语法优化,得到优化SQL语句。
该步骤中,可以在确定SQL的语法结构后,利用语法结构对预设的语法优化规则进行遍历,确定该SQL语句是否与语法优化规则中的条件匹配。其中,语法优化规则可以是根据历史经验确定的优化规则,能够用于将SQL语句中的一些字段进行替换成执行速度更快的形式,或将SQL语句中的错误字段替换为语法正确的字段,从而实现对SQL语句进行语法优化。
一些可能的实施方式中,所述基于所述语法结构以及预设的语法优化规则,对所述SQL语句进行语法优化,得到优化SQL语句,包括:
基于所述语法结构,从所述SQL语句中查找与所述语法优化规则匹配的至少一个待优化字段;
将所述待优化字段替换为与所述语法优化规则对应的优化字段,得到所述优化SQL语句。
示例性的,在SQL语句中,where条件可以利用索引来进行数据定位,但当where条件使用了函数时,则无法利用索引,会导致执行SQL语句的速度较慢,在语法优化规则中,即可包含“存在使用函数的where条件”这一匹配条件,SQL语句中存在使用函数的where条件部分的字段即为待优化字段,其对应的优化策略可以为“将where条件使用的函数转换为非函数形式”,根据语法优化规则,可以生成优化字段,利用优化字段替换待优化字段,即可完成语法优化。相似的,SQL语句中若存在or结构的字段,or字段即可作为待优化字段,可以根据优化规则生成union all结构的字段作为优化字段,进行语法优化。
S103:获取所述优化SQL语句在目标数据库下的执行计划、所述执行计划对应的目标数据表的结构信息以及所述目标数据表对应的索引相关信息。
该步骤中,可以在对SQL语句进行语法优化之后,对优化后的SQL语句,即优化SQL语句对应的数据表进行索引优化。目标数据表是SQL语句在对应的数据库中需要查询的数据表,数据表中记录有SQL语句查询的数据。为了对目标数据表进行针对所述优化SQL语句的索引优化,需要先获取相关的信息,这些信息可以包括优化SQL语句在目标数据库下的执行计划、执行计划对应的目标数据表的结构信息、目标数据表对应的索引相关信息。
其中,执行计划可以是经过目标数据库的优化器生成的执行该优化SQL语句的具体过程,可以包括执行该优化SQL语句时,多个目标数据表的join顺序,执行时使用的索引等信息,优化SQL语句中where条件涉及的数据量等;执行计划对应的目标数据表的结构信息可以包括目标数据表的行、列数,具有的索引数量,具有索引的列信息等;目标数据表对应的索引相关信息可以包括目标数据表中每个索引的属性信息、候选索引列的基值等信息。
具体的,可以利用explain select语句获取执行计划,利用show create tablet1语句获取目标数据表的结构信息,利用show index from t1、select count(distincta),count(distinct b)from t1语句获取索引相关信息,利用select count(*)from t1where a<10语句获取where条件返回的数据量。
S104:基于所述执行计划、所述结构信息以及所述索引相关信息,对所述目标数据表进行针对所述优化SQL语句的索引优化。
其中,索引优化可以指对目标数据表的索引进行新增和/或删除等操作。通过对目标数据表的索引进行合理的修改,使MySQL在执行优化SQL语句时的速度提升。
在一些可能的实施方式中,所述基于所述执行计划、所述结构信息以及所述索引相关信息,对所述目标数据表进行针对所述优化SQL语句的索引优化,包括:
基于所述执行计划中目标数据表的联接顺序,确定所述目标数据表的索引优化顺序;
按照所述索引优化顺序,基于所述结构信息以及所述索引相关信息,依次对所述目标数据表进行针对所述优化SQL语句的索引优化。
该步骤中,由于SQL语句可能会涉及到多个目标数据表,而多个目标数据表的查询是存在一定顺序的,可以先根据执行计划,确定目标数据表的联接顺序(join顺序),并将目标数据表的join顺序作为目标数据表的索引优化顺序。其中,join顺序可以为MySQL在执行优化SQL语句时对目标数据表的查询顺序。
在确定索引优化顺序后,即可按照索引优化顺序,依次对目标数据表进行针对所述优化SQL语句的索引优化。
在一些可能的实施方式中,于所述结构信息以及所述索引相关信息,对所述目标数据表进行针对所述优化SQL语句的索引优化,包括:
基于所述优化SQL语句的结构信息,对所述优化SQL语句的各个字段进行聚类;
基于聚类结果以及所述目标数据表的结构信息,确定所述目标数据表中的至少一个候选索引列;
基于所述结构信息以及所述索引相关信息,分别计算利用所述候选索引列对应的索引执行所述优化SQL语句的查询代价,并基于所述查询代价确定所述目标索引列;
基于所述目标索引列,生成所述目标数据表的索引优化建议。
该步骤中,由于MySQL想要利用索引执行优化SQL语句,需要优化SQL语句符合最左前缀法则,因此,可以先对优化SQL语句的各个字段进行聚类,将优化SQL语句中where/on/having条件的部分按照等值访问和范围查询两种条件进行汇总。
示例性的,等值访问的部分可以包含运算符“=”、“is null”,范围查询的部分可以包含运算符“like”、“between”、“<”、“>”、“<=”、“>=”、“in”、“not in”等,在对优化SQL的结构信息进行聚类后,可以得到一个优化SQL语句的数据结构,该数据结构同样为树结构,可以包含where条件的根,每个数据库下每个table内的where条件和on条件的集合,并且该集合按照等值访问和范围查询进行了聚类,以及涉及到group by、order by、distinct等结构的字段。
在得到聚类结果后,可以按照基值的大小,将集合中按照等值访问和范围查询的结构进行排序,基值较大的结构能够影响的SQL语句较多,可以优先针对基值较大的结构进行优化,或为基值较大的结构对应的索引赋予较小的查询代价权重。
进一步的,基于聚类结果和目标数据表的结构信息,确定目标数据表中的至少一个候选索引列,基于聚类结果,可以确定优化SQL语句各个部分是否能够利用索引进行优化,在能够利用索引进行优化的情况下,可以根据目标数据表的结构信息,确定目标数据表中与该结构对应的候选索引列。
在确定候选索引列后,可以基于目标数据表的结构信息以及索引相关信息,计算每个候选索引列对应的查询代价,查询代价的计算方式可以是预设的,查询代价能够表征利用对应的候选索引列执行该优化SQL语句所消耗的时间或计算资源,查询代价越高,查询消耗的时间就越长,这里,可以选取查询代价最低的候选索引列作为目标索引列。
示例性的,可以先对优化SQL语句中group by/distinct/order by的结构进行索引优化,再对where/on/having的结构进行优化,避免因优化SQL无法利用索引造成的无效计算。
在一些可能的实施方式中,在基于所述目标索引列,生成所述目标数据表的索引优化建议之后,所述方法还包括:
对采用所述索引优化建议后的目标数据表进行覆盖索引优化,生成所述目标数据表的覆盖索引优化建议。
该步骤中,在得到索引优化建议后,还可以再进行覆盖索引优化,当语句符合预设的判断条件时,可以进行覆盖索引优化,判断是否能在目标数据表的select列上建立索引,生成覆盖索引优化建议,进而简化执行优化SQL语句的步骤,若不符合,则可以生成空的覆盖索引优化建议。
其中,进行覆盖索引优化的前置条件可以包括:
所有select列必须为非表达式、不包含函数或仅包含min()\max()函数;该表where/on/having部分条件包含的所有列必须能用于建立索引;
当前表内连接列、where/on/having的列、select列,总个数必须小于或等于3;优化SQL语句里必须不包含任何group by/distinct/order by结构的语句。
在一些可能的实施方式中,在生成所述目标数据表的覆盖索引优化建议之后,所述方法还包括:
对采取所述覆盖优化建议后的目标数据表进行冗余索引优化,生成所述目标数据表的冗余索引优化建议。
该步骤中,可以对采取索引优化建议以及覆盖索引优化建议的目标数据表进行冗余索引优化,将建议中存在冲突或重复的索引删除,最终得到用于精简索引优化建议的冗余索引优化建议。
本公开实施例能够在对SQL语句本身优化的同时,对SQL语句对应的数据表进行索引优化,实现针对SQL语句的多方位自动优化,使优化查询语句的效率提高,并提升优化的效果,进而使优化后的SQL语句能够被MySQL更快的执行。
本领域技术人员可以理解,在具体实施方式的上述方法中,各步骤的撰写顺序并不意味着严格的执行顺序而对实施过程构成任何限定,各步骤的具体执行顺序应当以其功能和可能的内在逻辑确定。
基于同一发明构思,本公开实施例中还提供了与查询语句优化方法对应的查询语句优化装置,由于本公开实施例中的装置解决问题的原理与本公开实施例上述查询语句优化方法相似,因此装置的实施可以参见方法的实施,重复之处不再赘述。
参照图3所示,为本公开实施例提供的一种查询语句优化装置的示意图,所述查询语句优化装置300包括:
确定模块310,用于获取待优化的结构化查询语言SQL语句,并确定所述SQL语句的语法结构;
第一优化模块320,用于基于所述语法结构以及预设的语法优化规则,对所述SQL语句进行语法优化,得到优化SQL语句;
获取模块330,用于获取所述优化SQL语句在目标数据库下的执行计划、所述执行计划对应的目标数据表的结构信息以及所述目标数据表对应的索引相关信息;
第二优化模块340,用于基于所述执行计划、所述结构信息以及所述索引相关信息,对所述目标数据表进行针对所述优化SQL语句的索引优化。
本公开实施例能够在对SQL语句本身优化的同时,对SQL语句对应的数据表进行索引优化,实现针对SQL语句的多方位自动优化,使优化查询语句的效率提高,并提升优化的效果,进而使优化后的SQL语句能够被MySQL更快的执行。
一种可选的实施方式中,所述确定模块310在确定所述SQL语句的语法结构时,具体用于:
利用预设的解析器,确定所述SQL语句中每个词语的类型;
基于所述SQL语句中每个词语的类型以及预设的SQL语法规则,生成所述SQL语句的语法树,得到所述SQL语句的语法结构。
一种可选的实施方式中,所述第一优化模块320具体用于:
基于所述语法结构,从所述SQL语句中查找与所述语法优化规则匹配的至少一个待优化字段;
将所述待优化字段替换为与所述语法优化规则对应的优化字段,得到所述优化SQL语句。
一种可选的实施方式中,所述第二优化模块340具体用于:
基于所述执行计划中目标数据表的联接顺序,确定所述目标数据表的索引优化顺序;
按照所述索引优化顺序,基于所述结构信息以及所述索引相关信息,依次对所述目标数据表进行针对所述优化SQL语句的索引优化。
一种可选的实施方式中,所述第二优化模块340在基于所述结构信息以及所述索引相关信息,对所述目标数据表进行针对所述优化SQL语句的索引优化时,具体用于:
基于所述优化SQL语句的结构信息,对所述优化SQL语句的各个字段进行聚类;
基于聚类结果以及所述目标数据表的结构信息,确定所述目标数据表中的至少一个候选索引列;
基于所述结构信息以及所述索引相关信息,分别计算利用所述候选索引列对应的索引执行所述优化SQL语句的查询代价,并基于所述查询代价确定所述目标索引列;
基于所述目标索引列,生成所述目标数据表的索引优化建议。
一种可选的实施方式中,在基于所述目标索引列,生成所述目标数据表的索引优化建议之后,所述第二优化模块340还用于:
对采用所述索引优化建议后的目标数据表进行覆盖索引优化,生成所述目标数据表的覆盖索引优化建议。
一种可选的实施方式中,在生成所述目标数据表的覆盖索引优化建议之后,所述第二优化模块340还用于:
对采取所述覆盖优化建议后的目标数据表进行冗余索引优化,生成所述目标数据表的冗余索引优化建议。
关于装置中的各模块的处理流程、以及各模块之间的交互流程的描述可以参照上述方法实施例中的相关说明,这里不再详述。
对应于图1中的查询语句优化方法,本公开实施例还提供了一种电子设备400,如图4所示,为本公开实施例提供的电子设备400结构示意图,包括:
处理器41、存储器42、和总线43;存储器42用于存储执行指令,包括内存421和外部存储器422;这里的内存421也称内存储器,用于暂时存放处理器41中的运算数据,以及与硬盘等外部存储器422交换的数据,处理器41通过内存421与外部存储器422进行数据交换,当所述电子设备400运行时,所述处理器41与所述存储器42之间通过总线43通信,使得所述处理器41执行以下指令:
获取待优化的结构化查询语言SQL语句,并确定所述SQL语句的语法结构;
基于所述语法结构以及预设的语法优化规则,对所述SQL语句进行语法优化,得到优化SQL语句;
获取所述优化SQL语句在目标数据库下的执行计划、所述执行计划对应的目标数据表的结构信息以及所述目标数据表对应的索引相关信息;
基于所述执行计划、所述结构信息以及所述索引相关信息,对所述目标数据表进行针对所述优化SQL语句的索引优化。
本公开实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述方法实施例中所述的查询语句优化方法的步骤。其中,该存储介质可以是易失性或非易失的计算机可读取存储介质。
本公开实施例还提供一种计算机程序产品,该计算机程序产品承载有程序代码,所述程序代码包括的指令可用于执行上述方法实施例中所述的查询语句优化方法的步骤,具体可参见上述方法实施例,在此不再赘述。
其中,上述计算机程序产品可以具体通过硬件、软件或其结合的方式实现。在一个可选实施例中,所述计算机程序产品具体体现为计算机存储介质,在另一个可选实施例中,计算机程序产品具体体现为软件产品,例如软件开发包(Software Development Kit,SDK)等等。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统和装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。在本公开所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本公开各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本公开的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本公开各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-OnlyMemory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上所述实施例,仅为本公开的具体实施方式,用以说明本公开的技术方案,而非对其限制,本公开的保护范围并不局限于此,尽管参照前述实施例对本公开进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本公开实施例技术方案的精神和范围,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应所述以权利要求的保护范围为准。
Claims (8)
1.一种查询语句优化方法,其特征在于,包括:
获取待优化的结构化查询语言SQL语句,并确定所述SQL语句的语法结构;
基于所述语法结构以及预设的语法优化规则,对所述SQL语句进行语法优化,得到优化SQL语句;
获取所述优化SQL语句在目标数据库下的执行计划、所述执行计划对应的目标数据表的结构信息以及所述目标数据表对应的索引相关信息;
基于所述执行计划、所述结构信息以及所述索引相关信息,对所述目标数据表进行针对所述优化SQL语句的索引优化,包括:
基于所述执行计划中目标数据表的联接顺序,确定所述目标数据表的索引优化顺序;
按照所述索引优化顺序,基于所述结构信息以及所述索引相关信息,依次对所述目标数据表进行针对所述优化SQL语句的索引优化;
所述基于所述结构信息以及所述索引相关信息,依次对所述目标数据表进行针对所述优化SQL语句的索引优化,包括:基于所述优化SQL语句的结构信息,对所述优化SQL语句的各个字段进行聚类;基于聚类结果以及所述目标数据表的结构信息,确定所述目标数据表中的至少一个候选索引列;基于所述结构信息以及所述索引相关信息,分别计算利用所述候选索引列对应的索引执行所述优化SQL语句的查询代价,并基于所述查询代价确定目标索引列;基于所述目标索引列,生成所述目标数据表的索引优化建议。
2.根据权利要求1所述的方法,其特征在于,所述确定所述SQL语句的语法结构,包括:
利用预设的解析器,确定所述SQL语句中每个词语的类型;
基于所述SQL语句中每个词语的类型以及预设的SQL语法规则,生成所述SQL语句的语法树,得到所述SQL语句的语法结构。
3.根据权利要求1所述的方法,其特征在于,所述基于所述语法结构以及预设的语法优化规则,对所述SQL语句进行语法优化,得到优化SQL语句,包括:
基于所述语法结构,从所述SQL语句中查找与所述语法优化规则匹配的至少一个待优化字段;
将所述待优化字段替换为与所述语法优化规则对应的优化字段,得到所述优化SQL语句。
4.根据权利要求1所述的方法,其特征在于,在基于所述目标索引列,生成所述目标数据表的索引优化建议之后,所述方法还包括:
对采用所述索引优化建议后的目标数据表进行覆盖索引优化,生成所述目标数据表的覆盖索引优化建议。
5.根据权利要求4所述的方法,其特征在于,在生成所述目标数据表的覆盖索引优化建议之后,所述方法还包括:
对采取所述覆盖索引优化建议后的目标数据表进行冗余索引优化,生成所述目标数据表的冗余索引优化建议。
6.一种查询语句优化装置,其特征在于,包括:
确定模块,用于获取待优化的结构化查询语言SQL语句,并确定所述SQL语句的语法结构;
第一优化模块,用于基于所述语法结构以及预设的语法优化规则,对所述SQL语句进行语法优化,得到优化SQL语句;
获取模块,用于获取所述优化SQL语句在目标数据库下的执行计划、所述执行计划对应的目标数据表的结构信息以及所述目标数据表对应的索引相关信息;
第二优化模块,用于基于所述执行计划、所述结构信息以及所述索引相关信息,对所述目标数据表进行针对所述优化SQL语句的索引优化,包括:基于所述执行计划中目标数据表的联接顺序,确定所述目标数据表的索引优化顺序;按照所述索引优化顺序,基于所述结构信息以及所述索引相关信息,依次对所述目标数据表进行针对所述优化SQL语句的索引优化;
所述基于所述结构信息以及所述索引相关信息,依次对所述目标数据表进行针对所述优化SQL语句的索引优化,包括:基于所述优化SQL语句的结构信息,对所述优化SQL语句的各个字段进行聚类;基于聚类结果以及所述目标数据表的结构信息,确定所述目标数据表中的至少一个候选索引列;基于所述结构信息以及所述索引相关信息,分别计算利用所述候选索引列对应的索引执行所述优化SQL语句的查询代价,并基于所述查询代价确定目标索引列;基于所述目标索引列,生成所述目标数据表的索引优化建议。
7.一种电子设备,其特征在于,包括:处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当电子设备运行时,所述处理器与所述存储器之间通过总线通信,所述机器可读指令被所述处理器执行时执行如权利要求1至5任一所述的查询语句优化方法的步骤。
8.一种计算机可读存储介质,其特征在于,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行如权利要求1至5任意一项所述的查询语句优化方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011555423.1A CN112559554B (zh) | 2020-12-24 | 2020-12-24 | 一种查询语句优化方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011555423.1A CN112559554B (zh) | 2020-12-24 | 2020-12-24 | 一种查询语句优化方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112559554A CN112559554A (zh) | 2021-03-26 |
CN112559554B true CN112559554B (zh) | 2024-01-26 |
Family
ID=75033904
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011555423.1A Active CN112559554B (zh) | 2020-12-24 | 2020-12-24 | 一种查询语句优化方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112559554B (zh) |
Families Citing this family (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113051287B (zh) * | 2021-06-01 | 2021-08-20 | 北京达佳互联信息技术有限公司 | 查询语句的生成方法、装置、设备和存储介质 |
CN113434529B (zh) * | 2021-06-22 | 2023-06-16 | 青岛海尔科技有限公司 | 业务数据查询方法、装置、存储介质、处理器及电子设备 |
CN113468204A (zh) * | 2021-06-28 | 2021-10-01 | 深信服科技股份有限公司 | 一种数据查询方法、装置、设备、介质 |
CN113505141A (zh) * | 2021-07-05 | 2021-10-15 | 浪潮云信息技术股份公司 | 基于人工智能实现数据库sql优化执行的自动化方法及系统 |
CN113553339B (zh) * | 2021-07-13 | 2024-03-19 | 杭州安恒信息技术股份有限公司 | 数据查询方法、中间件、电子装置和存储介质 |
CN113590647B (zh) * | 2021-07-29 | 2024-02-23 | 中国联合网络通信集团有限公司 | Sql语句优化方法、装置、设备、存储介质及产品 |
CN113779064B (zh) * | 2021-08-16 | 2023-09-12 | 新浪技术(中国)有限公司 | 一种线上sql智能优化方法及系统 |
CN113656440A (zh) * | 2021-08-20 | 2021-11-16 | 中国工商银行股份有限公司 | 一种数据库语句优化方法、装置及设备 |
CN114443691B (zh) * | 2022-01-18 | 2024-01-23 | 苏州浪潮智能科技有限公司 | 数据库查询调优方法、系统及计算机设备 |
CN114347039B (zh) * | 2022-02-14 | 2023-09-22 | 北京航空航天大学杭州创新研究院 | 机器人前瞻控制方法及相关装置 |
CN117290352A (zh) * | 2022-06-16 | 2023-12-26 | 中兴通讯股份有限公司 | 索引建立方法、电子设备和计算机存储设备 |
CN115062047A (zh) * | 2022-07-12 | 2022-09-16 | 平安资产管理有限责任公司 | 数据优化方法、装置、计算机设备及存储介质 |
CN115114354B (zh) * | 2022-08-30 | 2023-01-06 | 广州市玄武无线科技股份有限公司 | 一种分布式数据存储及查询系统 |
CN117271576A (zh) * | 2023-10-19 | 2023-12-22 | 北京人大金仓信息技术股份有限公司 | 一种查询优化方法、存储介质与计算机设备 |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102043849A (zh) * | 2010-12-20 | 2011-05-04 | 惠州市贝圣科特软件有限公司 | 表意构件电子词典系统及其实现方法 |
CN102760167A (zh) * | 2012-06-13 | 2012-10-31 | 上海方正数字出版技术有限公司 | 基于粒子群优化算法的XQuery查询路径优化方法 |
CN104598454A (zh) * | 2013-10-31 | 2015-05-06 | 南京思润软件有限公司 | 一种基于xml的信息搜索方法 |
CN105447030A (zh) * | 2014-08-29 | 2016-03-30 | 阿里巴巴集团控股有限公司 | 一种索引处理方法与设备 |
CN105975488A (zh) * | 2016-04-25 | 2016-09-28 | 哈尔滨工程大学 | 一种关系数据库中基于主题类簇单元的关键词查询方法 |
CN108932258A (zh) * | 2017-05-25 | 2018-12-04 | 华为技术有限公司 | 数据索引处理方法及装置 |
CN110580252A (zh) * | 2019-07-30 | 2019-12-17 | 中国人民解放军国防科技大学 | 多目标优化下的空间对象索引与查询方法 |
WO2020105748A1 (ko) * | 2018-11-21 | 2020-05-28 | 전자부품연구원 | 분산형 데이터베이스상의 인덱스 병합을 활용한 질의 최적화 방법 |
CN111400338A (zh) * | 2020-03-04 | 2020-07-10 | 平安医疗健康管理股份有限公司 | Sql优化方法、装置、存储介质及计算机设备 |
CN111723091A (zh) * | 2020-05-25 | 2020-09-29 | 中国建设银行股份有限公司 | 基于Oracle数据库的索引处理方法、系统、设备和存储介质 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9298761B2 (en) * | 2009-04-30 | 2016-03-29 | Hewlett Packard Enterprise Development Lp | Adaptive merging in database indexes |
US20180268015A1 (en) * | 2015-09-02 | 2018-09-20 | Sasha Sugaberry | Method and apparatus for locating errors in documents via database queries, similarity-based information retrieval and modeling the errors for error resolution |
-
2020
- 2020-12-24 CN CN202011555423.1A patent/CN112559554B/zh active Active
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102043849A (zh) * | 2010-12-20 | 2011-05-04 | 惠州市贝圣科特软件有限公司 | 表意构件电子词典系统及其实现方法 |
CN102760167A (zh) * | 2012-06-13 | 2012-10-31 | 上海方正数字出版技术有限公司 | 基于粒子群优化算法的XQuery查询路径优化方法 |
CN104598454A (zh) * | 2013-10-31 | 2015-05-06 | 南京思润软件有限公司 | 一种基于xml的信息搜索方法 |
CN105447030A (zh) * | 2014-08-29 | 2016-03-30 | 阿里巴巴集团控股有限公司 | 一种索引处理方法与设备 |
CN105975488A (zh) * | 2016-04-25 | 2016-09-28 | 哈尔滨工程大学 | 一种关系数据库中基于主题类簇单元的关键词查询方法 |
CN108932258A (zh) * | 2017-05-25 | 2018-12-04 | 华为技术有限公司 | 数据索引处理方法及装置 |
WO2020105748A1 (ko) * | 2018-11-21 | 2020-05-28 | 전자부품연구원 | 분산형 데이터베이스상의 인덱스 병합을 활용한 질의 최적화 방법 |
CN110580252A (zh) * | 2019-07-30 | 2019-12-17 | 中国人民解放军国防科技大学 | 多目标优化下的空间对象索引与查询方法 |
CN111400338A (zh) * | 2020-03-04 | 2020-07-10 | 平安医疗健康管理股份有限公司 | Sql优化方法、装置、存储介质及计算机设备 |
CN111723091A (zh) * | 2020-05-25 | 2020-09-29 | 中国建设银行股份有限公司 | 基于Oracle数据库的索引处理方法、系统、设备和存储介质 |
Non-Patent Citations (1)
Title |
---|
童德茂.基于关系数据库优化技术的查询应用.《韶关学院学报.自然科学》.2009,第30卷(第09期),39-42. * |
Also Published As
Publication number | Publication date |
---|---|
CN112559554A (zh) | 2021-03-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112559554B (zh) | 一种查询语句优化方法及装置 | |
CN112199366B (zh) | 数据表处理方法、装置及设备 | |
CN110795455B (zh) | 依赖关系解析方法、电子装置、计算机设备及可读存储介质 | |
US10133778B2 (en) | Query optimization using join cardinality | |
CN110019384B (zh) | 一种血缘数据的获取方法、提供血缘数据的方法及装置 | |
US9934289B2 (en) | Fuzzy full text search | |
CN112988782B (zh) | Hive支持交互式查询的方法、装置及存储介质 | |
EP2788897B1 (en) | Optimally ranked nearest neighbor fuzzy full text search | |
CN110263104A (zh) | Json字符串处理方法及装置 | |
CN114328612A (zh) | 查询优化器的数据处理方法、装置及电子设备 | |
CN113342647A (zh) | 一种测试数据的生成方法及装置 | |
CN116610694A (zh) | 一种基于列和访问语句关系的规则校验方法和系统 | |
CN116610700A (zh) | 查询语句检测方法及装置、存储介质 | |
WO2023030461A1 (zh) | 一种分布式数据库检测方法及装置 | |
CN116266182A (zh) | Sql语句优化方法及装置 | |
CN114547083A (zh) | 数据处理方法、装置及电子设备 | |
US9959295B1 (en) | S-expression based computation of lineage and change impact analysis | |
CN113868138A (zh) | 测试数据的获取方法、系统、设备及存储介质 | |
CN110008238B (zh) | Nlj改进表连接方法及基于该改进方法的数据查询方法 | |
CN111190917B (zh) | 一种数据处理方法及装置 | |
CN111221846B (zh) | 一种sql语句的自动翻译方法及装置 | |
US12079179B2 (en) | Systems, methods, and media for accessing derivative properties from a post relational database utilizing a logical schema instruction that includes a base object identifier | |
CN116680299B (zh) | 数据库查询方法、系统、存储介质以及设备 | |
CN110263055B (zh) | 一种参数提示方法、装置、设备和存储介质 | |
CN117609303A (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 |