一种查询语句优化方法及装置制造方法及图纸

技术编号:27812266 阅读:17 留言:0更新日期:2021-03-30 09:51
本公开提供了一种查询语句优化方法及装置,其中,该方法包括:获取待优化的结构化查询语言SQL语句,并确定所述SQL语句的语法结构;基于所述语法结构以及预设的语法优化规则,对所述SQL语句进行语法优化,得到优化SQL语句;获取所述优化SQL语句在目标数据库下的执行计划、所述执行计划对应的目标数据表的结构信息以及所述目标数据表对应的索引相关信息;基于所述执行计划、所述结构信息以及所述索引相关信息,对所述目标数据表进行针对所述优化SQL语句的索引优化。本公开实施例能够实现针对SQL语句的多方位自动优化,使优化查询语句的效率提高,并提升优化的效果,进而使优化后的SQL语句能够被MySQL更快的执行。SQL语句能够被MySQL更快的执行。SQL语句能够被MySQL更快的执行。

【技术实现步骤摘要】
一种查询语句优化方法及装置


[0001]本公开涉及计算机
,具体而言,涉及一种查询语句优化方法及装置。

技术介绍

[0002]MySQL是一个关系型数据库管理系统,通过使用查询语句,能够在MySQL中进行数据的查询。查询语句通常是基于结构化查询语言(Structured Query Language,SQL)的,用户可以针对需要查询的数据,输入SQL语言,MySQL在获取到SQL语句后,可以生成该SQL语句的执行计划,并按照执行计划执行该SQL语句。
[0003]在实际的应用当中,一些SQL语句的执行时占用的计算资源可能较高,执行这些SQL语句所消耗的时间也较长,该类SQL语句在运行时的效率较低,若长时间运行,还可能对MySQL造成过大的压力,导致MySQL出现报错、崩溃等情况。

技术实现思路

[0004]本公开实施例至少提供一种查询语句优化方法及装置。
[0005]第一方面,本公开实施例提供了一种查询语句优化方法,包括:
[0006]获取待优化的结构化查询语言SQL语句,并确定所述SQL语句的语法结构;
[0007]基于所述语法结构以及预设的语法优化规则,对所述SQL语句进行语法优化,得到优化SQL语句;
[0008]获取所述优化SQL语句在目标数据库下的执行计划、所述执行计划对应的目标数据表的结构信息以及所述目标数据表对应的索引相关信息;
[0009]基于所述执行计划、所述结构信息以及所述索引相关信息,对所述目标数据表进行针对所述优化SQL语句的索引优化。
[0010]一种可选的实施方式中,确定所述SQL语句的语法结构,包括:
[0011]利用预设的解析器,确定所述SQL语句中每个词语的类型;
[0012]基于所述SQL语句中每个词语的类型以及预设的SQL语法规则,生成所述SQL语句的语法树,得到所述SQL语句的语法结构。
[0013]一种可选的实施方式中,基于所述语法结构以及预设的语法优化规则,对所述SQL语句进行语法优化,得到优化SQL语句,包括:
[0014]基于所述语法结构,从所述SQL语句中查找与所述语法优化规则匹配的至少一个待优化字段;
[0015]将所述待优化字段替换为与所述语法优化规则对应的优化字段,得到所述优化SQL语句。
[0016]一种可选的实施方式中,所述基于所述执行计划、所述结构信息以及所述索引相关信息,对所述目标数据表进行针对所述优化SQL语句的索引优化,包括:
[0017]基于所述执行计划中目标数据表的联接顺序,确定所述目标数据表的索引优化顺序;
[0018]按照所述索引优化顺序,基于所述结构信息以及所述索引相关信息,依次对所述目标数据表进行针对所述优化SQL语句的索引优化。
[0019]一种可选的实施方式中,基于所述结构信息以及所述索引相关信息,对所述目标数据表进行针对所述优化SQL语句的索引优化,包括:
[0020]基于所述优化SQL语句的结构信息,对所述优化SQL语句的各个字段进行聚类;
[0021]基于聚类结果以及所述目标数据表的结构信息,确定所述目标数据表中的至少一个候选索引列;
[0022]基于所述结构信息以及所述索引相关信息,分别计算利用所述候选索引列对应的索引执行所述优化SQL语句的查询代价,并基于所述查询代价确定所述目标索引列;
[0023]基于所述目标索引列,生成所述目标数据表的索引优化建议。
[0024]一种可选的实施方式中,在基于所述目标索引列,生成所述目标数据表的索引优化建议之后,所述方法还包括:
[0025]对采用所述索引优化建议后的目标数据表进行覆盖索引优化,生成所述目标数据表的覆盖索引优化建议。
[0026]一种可选的实施方式中,在生成所述目标数据表的覆盖索引优化建议之后,所述方法还包括:
[0027]对采取所述覆盖优化建议后的目标数据表进行冗余索引优化,生成所述目标数据表的冗余索引优化建议。
[0028]第二方面,本公开实施例还提供一种查询语句优化装置,包括:
[0029]确定模块,用于获取待优化的结构化查询语言SQL语句,并确定所述SQL语句的语法结构;
[0030]第一优化模块,用于基于所述语法结构以及预设的语法优化规则,对所述SQL语句进行语法优化,得到优化SQL语句;
[0031]获取模块,用于获取所述优化SQL语句在目标数据库下的执行计划、所述执行计划对应的目标数据表的结构信息以及所述目标数据表对应的索引相关信息;
[0032]第二优化模块,用于基于所述执行计划、所述结构信息以及所述索引相关信息,对所述目标数据表进行针对所述优化SQL语句的索引优化。
[0033]一种可选的实施方式中,所述确定模块在确定所述SQL语句的语法结构时,具体用于:
[0034]利用预设的解析器,确定所述SQL语句中每个词语的类型;
[0035]基于所述SQL语句中每个词语的类型以及预设的SQL语法规则,生成所述SQL语句的语法树,得到所述SQL语句的语法结构。
[0036]一种可选的实施方式中,所述第一优化模块具体用于:
[0037]基于所述语法结构,从所述SQL语句中查找与所述语法优化规则匹配的至少一个待优化字段;
[0038]将所述待优化字段替换为与所述语法优化规则对应的优化字段,得到所述优化SQL语句。
[0039]一种可选的实施方式中,所述第二优化模块具体用于:
[0040]基于所述执行计划中目标数据表的联接顺序,确定所述目标数据表的索引优化顺
序;
[0041]按照所述索引优化顺序,基于所述结构信息以及所述索引相关信息,依次对所述目标数据表进行针对所述优化SQL语句的索引优化。
[0042]一种可选的实施方式中,所述第二优化模块在基于所述结构信息以及所述索引相关信息,对所述目标数据表进行针对所述优化SQL语句的索引优化时,具体用于:
[0043]基于所述优化SQL语句的结构信息,对所述优化SQL语句的各个字段进行聚类;
[0044]基于聚类结果以及所述目标数据表的结构信息,确定所述目标数据表中的至少一个候选索引列;
[0045]基于所述结构信息以及所述索引相关信息,分别计算利用所述候选索引列对应的索引执行所述优化SQL语句的查询代价,并基于所述查询代价确定所述目标索引列;
[0046]基于所述目标索引列,生成所述目标数据表的索引优化建议。
[0047]一种可选的实施方式中,在基于所述目标索引列,生成所述目标数据表的索引优化建议之后,所述第二优化模块还用于:
[0048]对采用所述索引优化建议后的目标数据表进行覆盖索引优化,生成所述目标数据表的覆盖索引优化建议。
[0049]一种可选的实施方式中,在生成所述目标数据表的覆盖索引优化建议之后,所述第二优化模块还用于:
[0050]对采取所述覆本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种查询语句优化方法,其特征在于,包括:获取待优化的结构化查询语言SQL语句,并确定所述SQL语句的语法结构;基于所述语法结构以及预设的语法优化规则,对所述SQL语句进行语法优化,得到优化SQL语句;获取所述优化SQL语句在目标数据库下的执行计划、所述执行计划对应的目标数据表的结构信息以及所述目标数据表对应的索引相关信息;基于所述执行计划、所述结构信息以及所述索引相关信息,对所述目标数据表进行针对所述优化SQL语句的索引优化。2.根据权利要求1所述的方法,其特征在于,所述确定所述SQL语句的语法结构,包括:利用预设的解析器,确定所述SQL语句中每个词语的类型;基于所述SQL语句中每个词语的类型以及预设的SQL语法规则,生成所述SQL语句的语法树,得到所述SQL语句的语法结构。3.根据权利要求1所述的方法,其特征在于,所述基于所述语法结构以及预设的语法优化规则,对所述SQL语句进行语法优化,得到优化SQL语句,包括:基于所述语法结构,从所述SQL语句中查找与所述语法优化规则匹配的至少一个待优化字段;将所述待优化字段替换为与所述语法优化规则对应的优化字段,得到所述优化SQL语句。4.根据权利要求1所述的方法,其特征在于,所述基于所述执行计划、所述结构信息以及所述索引相关信息,对所述目标数据表进行针对所述优化SQL语句的索引优化,包括:基于所述执行计划中目标数据表的联接顺序,确定所述目标数据表的索引优化顺序;按照所述索引优化顺序,基于所述结构信息以及所述索引相关信息,依次对所述目标数据表进行针对所述优化SQL语句的索引优化。5.根据权利要求4所述的方法,其特征在于,基于所述结构信息以及所述索引相关信息,对所述目标数据表进行针对所述优化SQL语句的索引优化,包括:基于所述优化SQL语句的结构信息,对所述优化SQL语句的各个字段进行聚类;基于聚类结果以及所述目标数据表的结构...

【专利技术属性】
技术研发人员:贾利阳
申请(专利权)人:北京百家科技集团有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1