数据库查询语句的优化方法、装置、存储介质和电子设备与流程

未命名 07-29 阅读:203 评论:0
1.本技术涉及数据库处理领域,具体而言,涉及一种数据库查询语句的优化方法、装置、存储介质和电子设备。
背景技术
::2.当前,随着互联网的高速发展,各种数据库的使用越来与普及,而mysql作为最流行的关系型数据库之一,在电商、金融等诸多行业的生产系统中被广泛使用。3.但在rdsformysql的实际开发和维护过程中,经常会遇到rds(relationaldatabaseservice,关系型数据库服务)实例的性能问题,例如,rds实例的cpu(centralprocessingunit,中央处理器)使用率高,iops(input/outputoperationspersecond,每秒读写次数)使用率高,数据库上存在大量的锁等待等。经过相关技术人员综合分析和排查下来发现大部分原因均是由于sql语句的执行计划中存在隐式类型转换,其中,一种比较隐蔽的表现方式为字符集和字符排序不一致而引起的隐式类型转换,使得rds的实例运行不稳定,从而引起整个操作系统资源的过度使用,甚至造成会话堆积、引发线上故障。4.针对上述的问题,目前尚未提出有效的解决方案。技术实现要素:5.本技术实施例提供了一种数据库查询语句的优化方法、装置、存储介质和电子设备,以至少解决相关技术难以快速发现并解决查询语句存在隐式类型转换导致出现数据库慢查询的技术问题。6.根据本技术实施例的一个方面,提供了一种数据库查询语句的优化方法,包括:获取数据库内待执行的第一查询语句,并依据第一查询语句确定与第一查询语句相关的第一信息,其中,第一信息中包括:第一对象信息和第一连接条件信息;确定与第一查询语句对应的第一执行计划,并确定第一执行计划的访问类型;依据第一信息和访问类型判断第一执行计划内是否存在目标隐式类型转换,其中,目标隐式类型转换用于表征第一执行计划内的目标级别的目标字符集和目标字符序不对应;在第一执行计划中存在目标隐式类型转换时,确定第一查询语句为待优化查询语句,并确定与第一查询语句对应的目标优化脚本,其中,目标优化脚本用于使目标级别的目标字符集和目标字符序保持对应。7.可选地,获取数据库内待执行的第一查询语句,并依据第一查询语句确定与第一查询语句相关的第一信息,包括:获取数据库内待执行的第一查询语句;采用文本分析方法确定第一查询语句的文本特征信息;基于文本特征信息确定反映第一查询语句内第一基表和第一视图的第一对象信息,以及反映第一对象信息之间的第一连接条件信息。8.可选地,在确定与第一查询语句对应的第一执行计划之前,该方法还包括:获取第一查询语句和数据库的连接信息;依据连接信息建立数据库内与目标数据源的会话连接,其中,会话连接的形式为数据库连接;基于会话连接执行预设的采集脚本,得到与第一对象信息相关的元数据信息,其中,元数据信息中包括以下至少之一:统计信息、索引信息和结构定义信息。9.可选地,确定与第一查询语句对应的第一执行计划,并确定第一执行计划的访问类型,包括:在数据库内预执行第一查询语句,得到第一执行计划信息;分析第一执行计划信息,得到第一执行计划的访问类型。10.可选地,依据第一信息和访问类型判断第一执行计划内是否存在目标隐式类型转换,包括:依据第一信息和访问类型判断第一执行计划内的目标级别的目标字符集和目标字符序是否对应,其中,在目标级别的目标字符集和目标字符序不对应时,确定第一执行计划内存在目标隐式类型转换;在目标级别的目标字符集和目标字符序对应时,确定第一执行计划内不存在目标隐式类型转换。11.可选地,依据第一信息和访问类型判断第一执行计划内的目标级别的目标字符集和目标字符序是否对应,包括:将目标级别按照从低级到高级的顺序依次排序,得到目标顺序,其中,目标顺序为:列级别、表级别、数据库级别;依据第一信息和访问类型,并按照目标顺序依次判断第一执行计划内各个目标级别的目标字符集和目标字符序是否对应。12.可选地,在确定第一查询语句的目标优化脚本之后,该方法还包括:响应于目标对象的执行命令,确定在数据库内执行目标优化脚本,得到优化后的第二查询语句;依据第一查询语句和第二查询语句,确定查询语句优化前后的性能对比报告。13.根据本技术实施例的另一方面,还提供了一种数据库查询语句的优化装置,包括:获取模块,用于获取数据库内待执行的第一查询语句,并依据第一查询语句确定与第一查询语句相关的第一信息,其中,第一信息中包括:第一对象信息和第一连接条件信息;第一确定模块,用于确定与第一查询语句对应的第一执行计划,并确定第一执行计划的访问类型;判断模块,用于依据第一信息和访问类型判断第一执行计划内是否存在目标隐式类型转换,其中,目标隐式类型转换用于表征第一执行计划内的目标级别的字符集和字符序不对应;第二确定模块,用于在第一执行计划中存在目标隐式类型转换时,确定第一查询语句为待优化查询语句,并确定与第一查询语句对应的目标优化脚本,其中,目标优化脚本用于使目标级别的目标字符集和目标字符序保持对应。14.根据本技术实施例的另一方面,还提供了一种非易失性存储介质,该非易失性存储介质包括存储的程序,其中,非易失性存储介质所在设备通过运行该程序执行上述的数据库查询语句的优化方法。15.根据本技术实施例的另一方面,还提供了一种电子设备,该电子设备包括:存储器和处理器,其中,存储器中存储有计算机程序,处理器被配置为通过计算机程序执行上述的数据库查询语句的优化方法。16.在本技术实施例中,获取数据库内待执行的第一查询语句,并依据第一查询语句确定与第一查询语句相关的第一信息,其中,第一信息中包括:第一对象信息和第一连接条件信息;确定与第一查询语句对应的第一执行计划,并确定第一执行计划的访问类型;依据第一信息和访问类型判断第一执行计划内是否存在目标隐式类型转换,其中,目标隐式类型转换用于表征第一执行计划内的目标级别的目标字符集和目标字符序不对应;在第一执行计划中存在目标隐式类型转换时,确定第一查询语句为待优化查询语句,并确定与第一查询语句对应的目标优化脚本,其中,目标优化脚本用于使目标级别的目标字符集和目标字符序保持对应。其中,通过第一查询语句确定第一执行计划,并分析第一执行计划中是否存在目标隐式类型转换,从而快速发现第一查询语句中因目标隐式类型转换而引发的性能问题,并提供相应的目标优化脚本进行及时解决,提升了查询语句优化效率和优化准确性,进而解决了相关技术难以快速发现并解决查询语句存在隐式类型转换导致出现数据库慢查询技术问题。附图说明17.此处所说明的附图用来提供对本技术的进一步理解,构成本技术的一部分,本技术的示意性实施例及其说明用于解释本技术,并不构成对本技术的不当限定。在附图中:18.图1是根据本技术实施例的一种可选的数据库查询语句的优化方法的流程图;19.图2是根据本技术实施例的一种可选的文本分析方法的流程图;20.图3是根据本技术实施例的一种可选的数据库查询语句的优化装置的结构示意图。具体实施方式21.为了使本
技术领域
:的人员更好地理解本技术方案,下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分的实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本技术保护的范围。22.需要说明的是,本技术的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本技术的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。23.为了更好地理解本技术实施例,以下将本技术实施例中涉及的技术术语解释如下:24.rdsformysql:指云数据库服务,它将mysql的部署、运维、弹性、安全等特性封装起来,对外提供一个数据库实例。相当于用户自建数据库,运输数据库服务具备专业、经济、高效、可靠等特点。25.rds:一种即开即用、稳定可靠、可弹性伸缩的关系型数据库服务,支持mysql、sqlserver等引擎,并提供容灾、备份、恢复、监控、迁移等方面的全套解决方案。26.sql(structuredquerylanguage):具有数据操纵和数据定义等多种功能的数据库语言,这种语言具有交互性特点,能为用户提供极大的便利,数据库管理系统应充分利用sql语言提高计算机应用系统的工作质量与效率。sql语言不仅能独立应用于终端,还可以作为子语言为其他程序设计提供有效助力,该程序应用中,sql可与其他程序语言一起优化程序功能,进而为用户提供更多更全面的信息。27.实施例128.在rdsformysql的日常使用和实际运维中,经常会遇到rds实例的性能问题,而经过相关技术人员综合分析和排查下来发现大部分原因均是由于sql的执行计划中存在隐式转换,其中,一种比较隐蔽的表现方式为表字段的字符集类型不对应或者字符序规则不对应而引起的隐式类型转换,使得rds的实例运行不稳定,从而引起整个操作系统资源的过度使用,甚至造成会话堆积、引发线上故障。29.为了解决该问题,本技术实施例中提供了相关的解决方案,以下详细说明。30.需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。31.图1是根据本技术实施例的一种可选的数据库查询语句的优化方法的流程图,如图1所示,该方法至少包括步骤s102-s108,其中:32.步骤s102,获取数据库内待执行的第一查询语句,并依据第一查询语句确定与第一查询语句相关的第一信息,其中,第一信息中包括:第一对象信息和第一连接条件信息。33.在本发明上述步骤s102提供的技术方案中,在管理平台内输入数据库内待执行的sql文本(即第一查询语句的文本),管理平台可以对sql文本进行解析,从而快速得到与第一查询语句相关的第一信息,其中,第一信息中包括第一对象信息和第一连接条件信息。34.其中,第一对象信息可以理解为第一查询语句中相关表、相关视图等依赖对象信息,第一连接条件信息可以理解为依赖对象之间的连接条件等辅助信息。35.步骤s104,确定与第一查询语句对应的第一执行计划,并确定第一执行计划的访问类型。36.在本发明上述步骤s104提供的技术方案中,管理平台可以确定与第一查询语句对应的第一执行计划,并确定第一执行计划的访问类型,由于访问类型的不同,执行计划的执行效率也会相应发生变化,因此,按照执行效率从高到低对访问类型进行排序,得到如下顺序:system》const》eq_ref》ref》fulltext》ref_or_null》index_merge》unique_subquery》index_subquery》range》index》all。因此,通过上述顺序可以重点查看第一执行计划中全表扫描和索引全扫描等此类消耗较大的执行步骤,进而便于及时发现因慢sql语句造成的数据库的性能问题。37.步骤s106,依据第一信息和访问类型判断第一执行计划内是否存在目标隐式类型转换,其中,目标隐式类型转换用于表征第一执行计划内的目标级别的目标字符集和目标字符序不对应。38.在本发明上述步骤s106提供的技术方案中,管理平台依据第一信息中的第一对象信息和第一连接条件信息以及第一执行计划的访问类型,判断第一执行计划内是否存在目标隐式类型转换,一旦存在目标隐式类型转换,sql查询语句的执行效率会非常慢,导致数据库的实例需要占用大量cpu资源,因此,判断第一执行计划内是否存在目标隐式类型转换是非常必要的。其中,上述目标隐式类型转换的表现形式为各个级别的字符集和字符序不对应。39.通常,mysql支持多种字符集,在同一数据库或者同一表的不同字段都可以指定使用不同的字符集,因此在使用时择合适的字符集可以有效提升系统性能。其中,数据库的字符集(character)用于定义保存和解释rdsformysql的可用字符类型数据,其由一组可用字符和对应的编码方式组成,而字符序(collation)则指定字符集之间进行字符比较和排序的规则。在数据库中,不同的字符集对应不同的默认字符序,例如,在utf-8字符集中,使用unicode标准进行排序;而在latin1字符集中,则使用ascii顺序进行排序。因此,选择适当的字符集和字符序则以确保数据正确处理。40.需要注意的是,字符集和字符序是一对多的关系,一般mysql支持30多种字符集和70多种字符序。41.步骤s108,在第一执行计划中存在目标隐式类型转换时,确定第一查询语句为待优化查询语句,并确定与第一查询语句对应的目标优化脚本,其中,目标优化脚本用于使目标级别的目标字符集和目标字符序保持对应。42.在本发明上述步骤s108提供的技术方案中,在确定第一执行计划中存在目标隐式类型转换时,可以确定第一查询语句为待优化查询语句,并确定与第一查询语句对应的优化脚本,使第一查询语句中目标级别的目标字符集和目标字符序保持对应,避免出现慢sql的情况发生,导致数据库实例出现性能问题。其中,优化脚本可以为具体修改目标级别的目标字符集和目标字符序的sql优化建议,也可以是优化相关索引的sql优化建议。43.在本技术上述步骤s102-s108中实施例中,获取数据库内待执行的第一查询语句,并依据第一查询语句确定与第一查询语句相关的第一信息,其中,第一信息中包括:第一对象信息和第一连接条件信息;确定与第一查询语句对应的第一执行计划,并确定第一执行计划的访问类型;依据第一信息和访问类型判断第一执行计划内是否存在目标隐式类型转换,其中,目标隐式类型转换用于表征第一执行计划内的目标级别的目标字符集和目标字符序不对应;在第一执行计划中存在目标隐式类型转换时,确定第一查询语句为待优化查询语句,并确定与第一查询语句对应的目标优化脚本,其中,目标优化脚本用于使目标级别的目标字符集和目标字符序保持对应。其中,通过第一查询语句确定第一执行计划,并分析第一执行计划中是否存在目标隐式类型转换,从而快速发现第一查询语句中因目标隐式类型转换而引发的性能问题,并提供相应的目标优化脚本进行及时解决,提升了查询语句优化效率和优化准确性,进而解决了相关技术难以快速发现并解决查询语句存在隐式类型转换导致出现数据库慢查询技术问题。44.下面对该实施例的上述方法进行进一步地介绍。45.作为一种可选的实施方式,在本发明上述步骤s102提供的技术方案中,该方法可以包括:获取数据库内待执行的第一查询语句;采用文本分析方法确定第一查询语句的文本特征信息;基于文本特征信息确定反映第一查询语句内第一基表和第一视图的第一对象信息,以及反映第一对象信息之间的第一连接条件信息。46.在该实施例中,从sql语句中获取对象信息通常是在sql语句中创建一个固定名字的视图,然后查询该视图所依赖的所有基表,从而获取该查询语句的所有来源表,但该方法的弊端在于:查询语句中的来源表必须已在数据库中建好;若批量处理时,则需要频繁执行上述过程,即连接数据库、建视图、查询依赖表,这个过程需要依赖连接数据库去执行查询语句,可能存在查询语句执行超时的情况发生,耗费大量的系统资源,同时需要等待较长的时间。因此,在本技术中为了避免上述问题,提出首先在管理平台内输入数据库内待执行的sql文本;接着管理平台通过sql文本分析方法分析出sql文本的文本特征信息,根据文本特征信息可以得到第一查询语句的语句文本中相关的第一基表和第一视图的第一对象信息,同时,也可以得到第一对象信息之间的连接条件信息。从而有效避免采集文本特征信息占用数据库上的较多系统资源,进而给目标数据库带来风险问题。47.具体地,可以分析查询语句的句式,并将查询语句归纳为几种常用的句式,比如:单表查询、没有过滤条件、没有分组条件;单表查询、有过滤条件、没有分组条件;单表查询、没有过滤条件、有分组条件;单表查询、带子查询等;然后根据句式选择合适的步骤进行拆解。48.例如,图2是根据本技术实施例的一种可选的文本分析方法的流程图,如图2所示,可以分为如下步骤s1-s13完成文本分析过程,其中:49.步骤s1,获取查询语句;50.步骤s2,对查询语句的文本内容进行预处理,其中,预处理操纵包括但不仅限于:去除前后空格、去除换行符、去除tab符、去除单行多行注释、双空格转换为单空格、字母转大写等;51.步骤s3,判断文本内容中是否包含关键字with,若包含关键字with则执行步骤s4,否则执行步骤s5;52.步骤s4,提取临时表名和临时表的查询语句,继续执行步骤s5;53.步骤s5,判断文本内容中是否包含子查询,若包含子查询则执行步骤s6,否则执行步骤s7;54.步骤s6,提出所有子查询和主查询,继续执行步骤s7;55.步骤s7,判断文本内容中的多表关联写法是否为oracle关联写法,若多表关联的写法不是oracle关联写法则执行步骤s8,否则执行步骤s9;56.步骤s8,按照join写法将查询语句拆分为多个子查询语句,继续执行步骤s9;57.步骤s9,判断文本内容中是否包含关键字where,若包含关键字where则执行步骤s10,否则执行步骤s11;58.步骤s10,直接提取from和where之间的部分解析;59.步骤s11,判断文本内容中是否包含关键字groupby,若包含关键字groupby则执行步骤s12,否则执行步骤s13;60.步骤s12,直接提取from和groupby之间的部分解析;61.步骤s13,直接提取from之后的部分解析。62.作为另一种可选的实施方式,在本发明上述步骤s104提供的技术方案中,在确定与第一查询语句对应的第一执行计划,并确定第一执行计划的访问类型之前,该方法还可以包括:对第一查询语句进行语法解析,得到解析结果;基于解析结果判定第一查询语句是否有语法错误;当第一查询语句有语法错误时,确定第一查询语句不合法,并提示第一查询语句的语法有误。63.在该实施例中,为了确保输入至管理平台的第一查询语句为合法的查询语句,可以采用抽象语法树对用户输入的第一查询语句,进行语法检测并解析,得到解析结果;可以根据解析结果判定第一查询语句是否有语法错误,若第一查询语句存在语法错误时,说明第一查询语句不合法,此时生成相应的提示信息;若第一查询语句部存在语法错误时,说明第一查询语句合法,从而可以根据第一查询语句确定第一执行计划。64.作为另一种可选的实施方式,在本发明上述步骤s104提供的技术方案中,在确定与第一查询语句对应的第一执行计划,并确定第一执行计划的访问类型之前,该方法还可以包括:获取第一查询语句和数据库的连接信息;依据连接信息并利用java数据库连接形式建立数据库与目标数据源的会话连接,其中,会话连接为短连接形式;基于会话连接执行预设的采集脚本,得到与第一对象信息相关的元数据信息,其中,元数据信息中包括以下至少之一:统计信息、索引信息和结构定义信息。65.在该实施例中,由于分析sql语句特征时,需要耗费一定的时间采集和分析第一执行计划信息和相关第一对象的元数据信息,从而会占用数据库的一些会话连接,并消耗数据库一定的系统资源,因此,在本技术实施例中,首先获取第一查询语句和数据库的连接信息;使用该连接信息以java数据库连接形式建立数据库与目标数据源的会话连接,其中,会话连接为短连接形式,其中,目标数据源的配置可以为:数据源名称、描述、端口、用户名等配置信息,如数据源名称为mysql、ip主机名为127.0.0.1、端口为3308;接着,基于会话连接执行预设的采集脚本,得到基表的统计信息、基表的索引信息和基表的结构定义信息等元数据信息,从而减少采集和分析第一执行计划信息和相关第一对象的元数据信息,确保后续对第一执行计划优化的实时性更高。66.作为一种可选的实施方式,在本发明上述步骤s104提供的技术方案中,该方法可以包括:在数据库内预执行第一查询语句,得到第一执行计划信息;分析第一执行计划信息,得到第一执行计划的访问类型。67.在该实施例中,查询语句在优化时一个很重要指标就是执行计划的访问类型,其中,执行计划(executionplan)又称查询计划或者解释计划,是数据库执行sql语句的具体步骤。因此,在本技术实施例中,可以在数据库中预执行第一查询语句,得到对应的第一执行计划的相关信息,并且采用执行计划分析算法对第一执行计划进行分析,得到第一执行计划的访问类型,进而便于根据第一执行计划的访问类型快速找到性能消耗较大的执行步骤,其中,按照从好到坏的顺序对访问类型进行排序,得到如下顺序:system》const》eq_ref》ref》fulltext》ref_or_null》index_merge》unique_subquery》index_subquery》range》index》all。68.具体地,system表示从数据库的系统表中查询数据,此类访问类型往往不需要进行磁盘io,因此扫描速度最快;const表示常量连接,此类访问类型的扫描条件为命中主键(primarykey)索引或者唯一(unique)索引,并且被连接的部分为一个常量值;eq_ref的扫描条件为对于前表的每一个行(row),后表只有一行被扫描,也就是说,eq_ref的扫描条件为:多表的join查询、命中主键(primarykey)索引或者非空唯一(uniquenotnull)索引以及等值连接;而若将eq_ref的扫描条件中的主键(primarykey)索引改为普通非唯一(nonunique)索引,此时访问类型就从eq_ref降到ref,也即对于前表的每一个行(row),后表可能会有多一行的数据被扫描;若将const的主键(primarykey)索引也改为普通非唯一(nonunique)索引,常量的连接查询也会从const降到ref;range表示索引上的范围查询,其可以在索引上扫码特地范围内的值;index表示索引树扫描,此访问类型仅仅扫描索引,而不扫描数据;all表示全表扫描(fulltablescan),此访问类型的查询性能最差,且在查询数据量较大的情况下,对数据库的性能压力很大。69.作为一种可选的实施方式,在本发明上述步骤s106提供的技术方案中,该方法可以包括:依据第一信息和访问类型判断第一执行计划内的目标级别的目标字符集和目标字符序是否对应,其中,在目标级别的目标字符集和目标字符序不对应时,确定第一执行计划内存在目标隐式类型转换;在目标级别的目标字符集和目标字符序对应时,确定第一执行计划内不存在目标隐式类型转换。70.可选地,将目标级别按照从低级到高级的顺序依次排序,得到目标顺序,其中,目标顺序为:列级别、表级别、数据库级别、服务器级别;依据第一信息和访问类型,并按照目标顺序依次判断第一执行计划内的字符集和字符序是否对应。71.需要说明的是,字符集和字符序在不同的地方设置其作用也不同。72.在该实施例中,首先依据第一信息和访问类型判断第一执行计划内各个列级别的字符集和字符序是否对应,若列级别未设置字符集时,则向上判断该字段所在表的字符集和字符序是否对应,同理若该表上未设置字符集时,则继续向上判断该表所在数据库的字符集和字符序是否对应,依次类推。而若目标级别设置有字符集,且该级别的字符集和字符序不对应时,说明第一执行计划内存在目标隐式类型转换;反之,则说明第一执行计划内不存在目标隐式类型转换。73.作为一种可选的实施方式,在本发明上述步骤s108提供的技术方案中,在确定第一查询语句的目标优化脚本之后,该方法还可以包括:响应于目标对象的执行命令,确定在数据库内执行目标优化脚本,得到优化后的第二查询语句;依据第一查询语句和第二查询语句,确定查询语句优化前后的性能对比报告。74.在该实施例中,用户可以根据自身需要选择是否在数据库内执行目标优化脚本,当用户在管理平台内选择在数据库内执行目标优化脚本时,管理平台会自动执行目标优化脚本,当执行完目标优化脚本后可以得到优化后的第二查询语句。另外,还可以输出对第一查询语句优化前后的性能对比报告,从而完成查询语句的优化过程。75.在本技术实施例中,通过文本分析方法确定第一查询语句的第一对象信息和第一连接条件信息,从而提升优化查询语句的效率和准确性;通过在数据库内预执行第一查询语句,可以实时获取第一执行计划的相关信息,并依据相关对象的元数据信息确定第一执行计划的访问类型,可以减少采集和分析执行计划的时间;进一步地依据第一信息和访问类型判断第一执行计划内的目标级别的目标字符集和目标字符序是否对应,来判定第一执行计划内是否存在目标隐式类型转换,主动发现因目标隐式类型转换带来的性能问题,并及时提供优化建立以及优化前后的性能对比,从而提升查询语句的执行效率,增加rdsformysql实例运行的稳定性,进而解决了相关技术难以快速发现并解决查询语句存在隐式类型转换导致出现数据库慢查询技术问题。76.实施例277.根据本技术实施例,还提供了一种用于实现上述数据库查询语句的优化方法的数据库查询语句的优化装置,图3是根据本技术实施例的一种可选的数据库查询语句的优化装置的结构示意图,如图3所示,该数据库查询语句的优化装置中至少包括获取模块31,第一确定模块32,判断模块33和第二确定模块34,其中:78.获取模块31,用于获取数据库内待执行的第一查询语句,并依据第一查询语句确定与第一查询语句相关的第一信息,其中,第一信息中包括:第一对象信息和第一连接条件信息。79.具体地,获取模块31获取数据库内待执行的sql文本(即第一查询语句的文本),管理平台可以对sql文本进行解析,从而快速得到与第一查询语句相关的第一信息,其中,第一信息中包括第一对象信息和第一连接条件信息。80.其中,第一对象信息可以理解为第一查询语句中相关表、相关视图等依赖对象信息,第一连接条件信息可以理解为依赖对象之间的连接条件等辅助信息。81.可选地,获取模块31还用于获取数据库内待执行的第一查询语句;采用文本分析方法确定第一查询语句的文本特征信息;基于文本特征信息确定反映第一查询语句内第一基表和第一视图的第一对象信息,以及反映第一对象信息之间的第一连接条件信息。82.在该实施例中,从sql语句中获取对象信息通常是在sql语句中创建一个固定名字的视图,然后查询该视图所依赖的所有基表,从而获取该查询语句的所有来源表,但该方法的弊端在于:查询语句中的来源表必须已在数据库中建好;若批量处理时,则需要频繁执行上述过程,即连接数据库、建视图、查询依赖表,这个过程需要依赖连接数据库去执行查询语句,可能存在查询语句执行超时的情况发生,耗费大量的系统资源,同时需要等待较长的时间。因此,在本技术中为了避免上述问题,提出首先在管理平台内输入数据库内待执行的sql文本;接着管理平台通过sql文本分析方法分析出sql文本的文本特征信息,根据文本特征信息可以得到第一查询语句的语句文本中相关的第一基表和第一视图的第一对象信息,同时,也可以得到第一对象信息之间的连接条件信息。从而有效避免采集文本特征信息占用数据库上的较多系统资源,进而给目标数据库带来风险问题。83.可选地,获取模块31中还包括检验子模块,用于对第一查询语句进行语法解析,得到解析结果;基于解析结果判定第一查询语句是否有语法错误;当第一查询语句有语法错误时,确定第一查询语句不合法,并提示第一查询语句的语法有误。84.在该实施例中,为了确保第一查询语句为合法的查询语句,可以采用抽象语法树对用户输入的第一查询语句,进行语法检测并解析,得到解析结果;可以根据解析结果判定第一查询语句是否有语法错误,若第一查询语句存在语法错误时,说明第一查询语句不合法,此时生成相应的提示信息;若第一查询语句部存在语法错误时,说明第一查询语句合法,从而可以根据第一查询语句确定第一执行计划。85.第一确定模块32,用于确定与第一查询语句对应的第一执行计划,并确定第一执行计划的访问类型。86.具体地,第一确定模块32可以确定与第一查询语句对应的第一执行计划,并确定第一执行计划的访问类型,由于访问类型的不同,执行计划的执行效率也会相应发生变化,因此,按照执行效率从高到低对访问类型进行排序,得到如下顺序:system》const》eq_ref》ref》fulltext》ref_or_null》index_merge》unique_subquery》index_subquery》range》index》all。因此,通过上述顺序可以重点查看第一执行计划中全表扫描和索引全扫描等此类消耗较大的执行步骤,进而便于及时发现因慢sql语句造成的数据库的性能问题。87.可选地,第一确定模块32还用于获取第一查询语句和数据库的连接信息;依据连接信息并利用java数据库连接形式建立数据库与目标数据源的会话连接,其中,会话连接为短连接形式;基于会话连接执行预设的采集脚本,得到与第一对象信息相关的元数据信息,其中,元数据信息中包括以下至少之一:统计信息、索引信息和结构定义信息。88.在该实施例中,由于分析sql语句特征时,需要耗费一定的时间采集和分析第一执行计划信息和相关第一对象的元数据信息,从而会占用数据库的一些会话连接,并消耗数据库一定的系统资源,因此,在本技术实施例中,首先获取第一查询语句和数据库的连接信息;使用该连接信息以java数据库连接形式建立数据库与目标数据源的会话连接,其中,会话连接为短连接形式,其中,目标数据源的配置可以为:数据源名称、描述、端口、用户名等配置信息,如数据源名称为mysql、ip主机名为127.0.0.1、端口为3308;接着,基于会话连接执行预设的采集脚本,得到基表的统计信息、基表的索引信息和基表的结构定义信息等元数据信息,从而减少采集和分析第一执行计划信息和相关第一对象的元数据信息,确保后续对第一执行计划优化的实时性更高。89.作为一种可选的实施方式,第一确定模块32还用于在数据库内预执行第一查询语句,得到第一执行计划信息;分析第一执行计划信息,得到第一执行计划的访问类型。90.在该实施例中,查询语句在优化时一个很重要指标就是执行计划的访问类型,其中,执行计划(executionplan)又称查询计划或者解释计划,是数据库执行sql语句的具体步骤。因此,在本技术实施例中,可以在数据库中预执行第一查询语句,得到对应的第一执行计划的相关信息,并且采用执行计划分析算法对第一执行计划进行分析,得到第一执行计划的访问类型,进而便于根据第一执行计划的访问类型快速找到性能消耗较大的执行步骤,其中,按照从好到坏的顺序对访问类型进行排序,得到如下顺序:system》const》eq_ref》ref》fulltext》ref_or_null》index_merge》unique_subquery》index_subquery》range》index》all。91.具体地,system表示从数据库的系统表中查询数据,此类访问类型往往不需要进行磁盘io,因此扫描速度最快;const表示常量连接,此类访问类型的扫描条件为命中主键(primarykey)索引或者唯一(unique)索引,并且被连接的部分为一个常量值;eq_ref的扫描条件为对于前表的每一个行(row),后表只有一行被扫描,也就是说,eq_ref的扫描条件为:多表的join查询、命中主键(primarykey)索引或者非空唯一(uniquenotnull)索引以及等值连接;而若将eq_ref的扫描条件中的主键(primarykey)索引改为普通非唯一(nonunique)索引,此时访问类型就从eq_ref降到ref,也即对于前表的每一个行(row),后表可能会有多一行的数据被扫描;若将const的主键(primarykey)索引也改为普通非唯一(nonunique)索引,常量的连接查询也会从const降到ref;range表示索引上的范围查询,其可以在索引上扫码特地范围内的值;index表示索引树扫描,此访问类型仅仅扫描索引,而不扫描数据;all表示全表扫描(fulltablescan),此访问类型的查询性能最差,且在查询数据量较大的情况下,对数据库的性能压力很大。92.判断模块33,用于依据第一信息和访问类型判断第一执行计划内是否存在目标隐式类型转换,其中,目标隐式类型转换用于表征第一执行计划内的目标级别的目标字符集和目标字符序不对应。93.具体地,判断模块33可以依据第一信息中的第一对象信息和第一连接条件信息以及第一执行计划的访问类型,判断第一执行计划内是否存在目标隐式类型转换,一旦存在目标隐式类型转换,sql查询语句的执行效率会非常慢,导致数据库的实例需要占用大量cpu资源,因此,判断第一执行计划内是否存在目标隐式类型转换是非常必要的。其中,上述目标隐式类型转换的表现形式为目标字符集和目标字符序不对应。94.可选地,判断模块33还用于依据第一信息和访问类型判断第一执行计划内的目标级别的目标字符集和目标字符序是否对应,其中,在目标级别的目标字符集和目标字符序不对应时,确定第一执行计划内存在目标隐式类型转换;在目标级别的目标字符集和目标字符序对应时,确定第一执行计划内不存在目标隐式类型转换。95.可选地,将目标级别按照从低级到高级的顺序依次排序,得到目标顺序,其中,目标顺序为:列级别、表级别、数据库级别、服务器级别;依据第一信息和访问类型,并按照目标顺序依次判断第一执行计划内的字符集和字符序是否对应。96.需要说明的是,字符集和字符序在不同的地方设置其作用也不同。97.在该实施例中,首先依据第一信息和访问类型判断第一执行计划内各个列级别的字符集和字符序是否对应,若列级别未设置字符集时,则向上判断该字段所在表的字符集和字符序是否对应,同理若该表上未设置字符集时,则继续向上判断该表所在数据库的字符集和字符序是否对应,依次类推。而若目标级别设置有字符集,且该级别的字符集和字符序不对应时,说明第一执行计划内存在目标隐式类型转换;反之,则说明第一执行计划内不存在目标隐式类型转换。98.第二确定模块34,用于在第一执行计划中存在目标隐式类型转换时,确定第一查询语句为待优化查询语句,并确定与第一查询语句对应的目标优化脚本,其中,目标优化脚本用于使目标级别的目标字符集和目标字符序保持对应。99.具体地,第二确定模块34可以确定第一查询语句为待优化查询语句,并确定与第一查询语句对应的优化脚本,使第一查询语句中目标级别的目标字符集和目标字符序保持对应,避免出现慢sql的情况发生,导致数据库实例出现性能问题。其中,优化脚本可以为具体修改目标级别的目标字符集和目标字符序的sql优化建议,也可以是优化相关索引的sql优化建议。100.可选地,第二确定模块34还用于响应于目标对象的执行命令,确定在数据库内执行目标优化脚本,得到优化后的第二查询语句;依据第一查询语句和第二查询语句,确定查询语句优化前后的性能对比报告。101.具体地,用户可以根据自身需要选择是否在数据库内执行目标优化脚本,当用户在管理平台内选择在数据库内执行目标优化脚本时,管理平台会自动执行目标优化脚本,当执行完目标优化脚本后可以得到优化后的第二查询语句。另外,还可以输出对第一查询语句优化前后的性能对比报告,从而完成查询语句的优化过程。102.需要说明的是,本技术实施例中的数据库查询语句的优化装置中的各模块与实施例1中的数据库查询语句的优化方法的各实施步骤一一对应,由于实施例1中已经进行了详尽的描述,本实施例中部分未体现的细节可以参考实施例1,在此不再过多赘述。103.实施例3104.根据本技术实施例,还提供了一种非易失性存储介质,该非易失性存储介质包括存储的程序,其中,非易失性存储介质所在设备通过运行该程序执行实施例1中的数据库查询语句的优化方法。105.可选地,非易失性存储介质所在设备通过运行该程序执行实现以下步骤:106.步骤s102,获取数据库内待执行的第一查询语句,并依据第一查询语句确定与第一查询语句相关的第一信息,其中,第一信息中包括:第一对象信息和第一连接条件信息;107.步骤s104,确定与第一查询语句对应的第一执行计划,并确定第一执行计划的访问类型;108.步骤s106,依据第一信息和访问类型判断第一执行计划内是否存在目标隐式类型转换,其中,目标隐式类型转换用于表征第一执行计划内的目标级别的目标字符集和目标字符序不对应;109.步骤s108,在第一执行计划中存在目标隐式类型转换时,确定第一查询语句为待优化查询语句,并确定与第一查询语句对应的目标优化脚本,其中,目标优化脚本用于使目标级别的目标字符集和目标字符序保持对应。110.根据本技术实施例,还提供了一种处理器,该处理器用于运行程序,其中,程序运行时执行实施例1中的数据库查询语句的优化方法。111.可选地,程序运行时执行实现以下步骤:112.步骤s102,获取数据库内待执行的第一查询语句,并依据第一查询语句确定与第一查询语句相关的第一信息,其中,第一信息中包括:第一对象信息和第一连接条件信息;113.步骤s104,确定与第一查询语句对应的第一执行计划,并确定第一执行计划的访问类型;114.步骤s106,依据第一信息和访问类型判断第一执行计划内是否存在目标隐式类型转换,其中,目标隐式类型转换用于表征第一执行计划内的目标级别的目标字符集和目标字符序不对应;115.步骤s108,在第一执行计划中存在目标隐式类型转换时,确定第一查询语句为待优化查询语句,并确定与第一查询语句对应的目标优化脚本,其中,目标优化脚本用于使目标级别的目标字符集和目标字符序保持对应。116.根据本技术实施例,还提供了一种电子设备,该电子设备包括:存储器和处理器,其中,存储器中存储有计算机程序,处理器被配置为通过计算机程序执行实施例1中的数据库查询语句的优化方法。117.可选地,处理器被配置为通过计算机程序执行实现以下步骤:118.步骤s102,获取数据库内待执行的第一查询语句,并依据第一查询语句确定与第一查询语句相关的第一信息,其中,第一信息中包括:第一对象信息和第一连接条件信息;119.步骤s104,确定与第一查询语句对应的第一执行计划,并确定第一执行计划的访问类型;120.步骤s106,依据第一信息和访问类型判断第一执行计划内是否存在目标隐式类型转换,其中,目标隐式类型转换用于表征第一执行计划内的目标级别的目标字符集和目标字符序不对应;121.步骤s108,在第一执行计划中存在目标隐式类型转换时,确定第一查询语句为待优化查询语句,并确定与第一查询语句对应的目标优化脚本,其中,目标优化脚本用于使目标级别的目标字符集和目标字符序保持对应。122.上述本技术实施例序号仅仅为了描述,不代表实施例的优劣。123.在本技术的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。124.在本技术所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如单元的划分,可以为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。125.作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。126.另外,在本技术各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。127.集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本技术的技术方案本质上或者说对相关技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本技术各个实施例方法的全部或部分步骤。而前述的存储介质包括:u盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。128.以上仅是本技术的优选实施方式,应当指出,对于本
技术领域
:的普通技术人员来说,在不脱离本技术原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本技术的保护范围。当前第1页12当前第1页12
技术特征:
1.一种数据库查询语句的优化方法,其特征在于,包括:获取数据库内待执行的第一查询语句,并依据所述第一查询语句确定与所述第一查询语句相关的第一信息,其中,所述第一信息中包括:第一对象信息和第一连接条件信息;确定与所述第一查询语句对应的第一执行计划,并确定所述第一执行计划的访问类型;依据所述第一信息和所述访问类型判断所述第一执行计划内是否存在目标隐式类型转换,其中,所述目标隐式类型转换用于表示所述第一执行计划内的目标级别的目标字符集和目标字符序不对应;在所述第一执行计划中存在所述目标隐式类型转换时,确定所述第一查询语句为待优化查询语句,并确定与所述第一查询语句对应的目标优化脚本,其中,所述目标优化脚本用于使所述目标级别的所述目标字符集和所述目标字符序保持对应。2.根据权利要求1所述的方法,其特征在于,获取数据库内待执行的第一查询语句,并依据所述第一查询语句确定与所述第一查询语句相关的第一信息,包括:获取所述数据库内待执行的所述第一查询语句;采用文本分析方法确定所述第一查询语句的文本特征信息;基于所述文本特征信息确定反映所述第一查询语句内第一基表和第一视图的所述第一对象信息,以及反映所述第一对象信息之间的所述第一连接条件信息。3.根据权利要求1所述的方法,其特征在于,在确定与所述第一查询语句对应的第一执行计划之前,所述方法还包括:获取所述第一查询语句和所述数据库的连接信息;依据所述连接信息建立所述数据库内与目标数据源的会话连接,其中,所述会话连接的形式为数据库连接;基于所述会话连接执行预设的采集脚本,得到与所述第一对象信息相关的元数据信息,其中,所述元数据信息中包括以下至少之一:统计信息、索引信息和结构定义信息。4.根据权利要求3所述的方法,其特征在于,确定与所述第一查询语句对应的第一执行计划,并确定所述第一执行计划的访问类型,包括:在所述数据库内预执行所述第一查询语句,得到所述第一执行计划信息;分析所述第一执行计划信息,得到所述第一执行计划的访问类型。5.根据权利要求1所述的方法,其特征在于,依据所述第一信息和所述访问类型判断所述第一执行计划内是否存在目标隐式类型转换,包括:依据所述第一信息和所述访问类型判断所述第一执行计划内的目标级别的目标字符集和目标字符序是否对应,其中,在所述目标级别的所述目标字符集和所述目标字符序不对应时,确定所述第一执行计划内存在所述目标隐式类型转换;在所述目标级别的所述目标字符集和所述目标字符序对应时,确定所述第一执行计划内不存在所述目标隐式类型转换。6.根据权利要求5所述的方法,其特征在于,依据所述第一信息和所述访问类型判断所述第一执行计划内的目标级别的目标字符集和目标字符序是否对应,包括:将所述目标级别按照从低级到高级的顺序依次排序,得到目标顺序,其中,所述目标顺
序为:列级别、表级别、数据库级别;依据所述第一信息和所述访问类型,并按照所述目标顺序依次判断所述第一执行计划内各个目标级别的所述目标字符集和所述目标字符序是否对应。7.根据权利要求1所述的方法,其特征在于,在确定所述第一查询语句的目标优化脚本之后,所述方法还包括:响应于目标对象的执行命令,确定在所述数据库内执行所述目标优化脚本,得到优化后的第二查询语句;依据所述第一查询语句和所述第二查询语句,确定查询语句优化前后的性能对比报告。8.一种数据库查询语句的优化装置,其特征在于,包括:获取模块,用于获取数据库内待执行的第一查询语句,并依据所述第一查询语句确定与所述第一查询语句相关的第一信息,其中,所述第一信息中包括:第一对象信息和第一连接条件信息;第一确定模块,用于确定与所述第一查询语句对应的第一执行计划,并确定所述第一执行计划的访问类型;判断模块,用于依据所述第一信息和所述访问类型判断所述第一执行计划内是否存在目标隐式类型转换,其中,所述目标隐式类型转换用于表征所述第一执行计划内的目标级别的目标字符集和目标字符序不对应;第二确定模块,用于在所述第一执行计划中存在所述目标隐式类型转换时,确定所述第一查询语句为待优化查询语句,并确定与所述第一查询语句对应的目标优化脚本,其中,所述目标优化脚本用于使所述目标级别的所述目标字符集和所述目标字符序保持对应。9.一种非易失性存储介质,其特征在于,所述非易失性存储介质中存储有程序,其中,在所述程序运行时控制所述非易失性存储介质所在设备执行权利要求1至7中任意一项所述数据库查询语句的优化方法。10.一种电子设备,其特征在于,包括:存储器和处理器,所述处理器用于运行存储在所述存储器中的程序,其中,所述程序运行时执行权利要求1至7中任意一项所述的数据库查询语句的优化方法。

技术总结
本申请公开了一种数据库查询语句的优化方法、装置、存储介质和电子设备。包括:获取数据库内待执行的第一查询语句,并依据第一查询语句确定与第一查询语句相关的第一信息;确定与第一查询语句对应的第一执行计划,并确定第一执行计划的访问类型;依据第一信息和访问类型判断第一执行计划内是否存在目标隐式类型转换,其中,目标隐式类型转换用于表征第一执行计划内的目标级别的目标字符集和目标字符序不对应;在第一执行计划中目标隐式类型转换时,确定第一查询语句为待优化查询语句,并确定与第一查询语句对应的目标优化脚本。本申请解决了相关技术难以快速发现并解决查询语句存在隐式类型转换导致出现数据库慢查询的技术问题。术问题。术问题。


技术研发人员:张鹏
受保护的技术使用者:云和恩墨(北京)信息技术有限公司
技术研发日:2023.04.18
技术公布日:2023/7/28
版权声明

本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

航空之家 https://www.aerohome.com.cn/

飞机超市 https://mall.aerohome.com.cn/

航空资讯 https://news.aerohome.com.cn/

分享:

扫一扫在手机阅读、分享本文

相关推荐