CN112347120A - 一种基于复杂sql的自动优化方法和装置 - Google Patents

一种基于复杂sql的自动优化方法和装置 Download PDF

Info

Publication number
CN112347120A
CN112347120A CN202011160947.0A CN202011160947A CN112347120A CN 112347120 A CN112347120 A CN 112347120A CN 202011160947 A CN202011160947 A CN 202011160947A CN 112347120 A CN112347120 A CN 112347120A
Authority
CN
China
Prior art keywords
sql
optimization
sql statement
statement
execution
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
CN202011160947.0A
Other languages
English (en)
Other versions
CN112347120B (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.)
Bee Assistant Co ltd
Original Assignee
Bee Assistant 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 Bee Assistant Co ltd filed Critical Bee Assistant Co ltd
Priority to CN202011160947.0A priority Critical patent/CN112347120B/zh
Publication of CN112347120A publication Critical patent/CN112347120A/zh
Application granted granted Critical
Publication of CN112347120B publication Critical patent/CN112347120B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/242Query formulation
    • G06F16/2433Query languages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2453Query optimisation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Debugging And Monitoring (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开一种基于复杂SQL的自动优化方法和装置,方法包括:接收并从中筛选具有优化特征的SQL语句;根据基本规则,检验SQL语句的正确性;对SQL语句遍历所有优化规则,优化SQL语句;输出优化后的SQL语句并记录耗时;生成优化报告,并记录到数据库;其中,优化特征包括:执行出错、影响执行效率、执行顺序有问题、执行耗时长、索引问题导致全表查询、丢失索引、嵌套多级子查询;优化报告包括如下字段:应用程序、数据库类型、SQL语句、执行耗时、问题描述。本发明解决了现有技术中对于复杂SQL语句的开发与维护的复杂度较高、难度较大的问题,达到自动优化与效率监控的效果,提高SQL语句的执行效率。

Description

一种基于复杂SQL的自动优化方法和装置
技术领域
本发明实施例涉及数据库技术领域,尤其涉及一种基于复杂SQL的自动化方法和装置。
背景技术
在当前信息时代,效率对各种行业都非常重要,效率对一个企业的发展来说有着决定性的作用。同理,一个管理系统也不例外,作为系统平台不能单靠代码的好坏来判断系统的效率快慢,往往数据库的脚本SQL起到决定性的影响。因而,脚本优化显得极其重要,甚至影响一个系统的好与坏。
现有系统大部分的数据库脚本都交给ORM(对象/关系映射,object-relationa lmapping)框架去管理,典型的ORM框架包括Hibernate,iBATIS,JDO(Java Data Objects)和JPA(Java Persistence API)。确实,框架帮我们简化了很多问题,使得我们可以将精力集中于业务代码的开发。与此同时,使我们忽略了数据库脚本的执行效率问题。一条效率好的SQL语句,无疑在系统中极其重要。
由于目前大部分的系统,有拥有一套ORM框架,正是因为框架使得我们开发起来,简化很多管理JDBC操作。如果直接使用原生的JDBC操作数据库的A PI,需要处理与数据库访问相关的所有事情,包括数据库资源的管理和异常的处理。使用原生JDBC进行一次插入操作的代码的80%都是样板代码,包括获取和关闭数据库链接,SQL语句,异常处理等等。框架帮我们自动生成这部分代码,但是样板代码是在牺牲执行效率的前提下实现样板化,应用程序中出现SQ L语句不规范问题的原因在于,主要是人为因素关系比较大,开发人员都是根据功能决定SQL语句的,并不会深入理解执行原理,如需查询数据库中某个用户的某个信息,一般程序员都直接使用select*from user,目的是达到了,但是并没有考虑执行SQL语句的性能与效率。往往是目的到达了,就忽略内部执行逻辑,从而使开发人员养成一种“依赖”的惰性。
发明内容
鉴于以上所述现有技术的缺点,本发明的目的在于解决了现有技术中对于复杂SQL语句的开发与维护的复杂度较高、难度较大的问题,达到自动优化与效率监控的效果,提高SQL语句的执行效率。
本专利方案提供一种基于复杂SQL的自动优化方法,包括:
接收并从中筛选具有优化特征的SQL语句;
根据基本规则,检验所述SQL语句的正确性;
对所述SQL语句遍历所有优化规则,优化所述SQL语句;
输出优化后的所述SQL语句并记录耗时;
生成优化报告,并记录到数据库;
其中,所述优化特征包括以下至少一项:执行出错、影响执行效率、执行顺序有问题、执行耗时长、索引问题导致全表查询、丢失索引、嵌套多级子查询;所述优化报告包括如下字段:应用程序、数据库类型、SQL语句、执行耗时、问题描述。
进一步地,所述筛选出具有优化特征的SQL语句,具体包括:
将所述SQL语句发送给SQL Server执行并记录执行耗时,若触发优化特征阀值,则所述SQL语句符合所述优化特征。
进一步地,所述优化规则包括普通优化规则和自定义优化规则。
进一步地,所述普通优化规则包括:
若所述SQL语句中包含select*语句,则将*替换为对应的表字段;
若所述SQL语句进行全表扫描操作,则在where子句中使用!=或<>操作符;
若where子句中对字段进行操作,则在where子句中对字段进行函数操作;
若where子句中使用索引,则在where子句中的“=”左边进行函数、算术运算或其他表达式运算;
若where子句中含有操作符in,则用操作符exists代替操作符in。
进一步地,所述根据基本规则,检验所述SQL语句的正确性,具体包括:
将所述SQL语句发送给SQL Server,
若所述SQL语句在SQL Server中运行不报错,则所述SQL语句正确;
若所述SQL语句在SQL Server中运行有报错消息,则输出所述报错信息。
还提供一种基于复杂SQL的自动优化装置,包括:
接收筛选模块,接收并从中筛选具有优化特征的SQL语句;
验证模块,用于根据基本规则,检验所述SQL语句的正确性;
优化模块,用于对所述SQL语句遍历所有优化规则,优化所述SQL语句;输出模块,用于输出优化后的所述SQL语句;
监控模块,用于监控优化后的所述SQL语句的执行耗时;
报告生成模块,用于生成SQL优化报告;
其中,所述优化特征包括以下至少一项:执行出错、影响执行效率、执行顺序有问题、执行耗时长、索引问题导致全表查询、丢失索引、嵌套多级子查询;所述优化报告包括如下字段:应用程序、数据库类型、SQL语句、执行耗时、问题描述。
进一步地,所述筛选出具有优化特征的SQL语句,具体包括:
将所述SQL语句发送给SQL Server执行并记录执行耗时,若触发优化特征阀值,则所述SQL语句符合所述优化特征。
进一步地,所述优化规则包括普通优化规则和自定义优化规则。
进一步地,所述普通优化规则包括:
若所述SQL语句中包含select*语句,则将*替换为对应的表字段;
若所述SQL语句进行全表扫描操作,则在where子句中使用!=或<>操作符;
若where子句中对字段进行操作,则在where子句中对字段进行函数操作;
若where子句中使用索引,则在where子句中的“=”左边进行函数、算术运算或其他表达式运算;
若where子句中含有操作符in,则用操作符exists代替操作符in。
进一步地,所述根据基本规则,检验所述SQL语句的正确性,具体包括:
将所述SQL语句发送给SQL Server,
若所述SQL语句在SQL Server中运行不报错,则所述SQL语句正确;
若所述SQL语句在SQL Server中运行有报错消息,则输出所述报错信息。
本专利的改进带来如下优点:
本专利通过优化规则遍历的方法,自动对SQL语句进行优化,提高SQL语句的执行效率,缩短执行耗时;同时还对优化前后的执行效果进行记录,与优化记录一起形成优化报告,展示给开发人员,方便开发人员对优化前后的脚本进行监控,在提高效率的同时,开发人员也可以对脚本的执行计划有所了解,养成良好的SQL脚本编写习惯。
附图说明
图1为本发明实施例一种基于复杂SQL的自动优化方法的步骤示意图;
图2为本发明实施例一种基于复杂SQL的自动优化方法的流程示意图。
具体实施方式
以下通过特定的具体实例说明本发明的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本发明的其他优点与功效。本发明还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本发明的精神下进行各种修饰或改变。
如图1,2所示,本申请实施例1提供一种基于复杂SQL的自动优化方法,包括:
S101:接收并从中筛选具有优化特征的SQL语句;
S102:根据基本规则,检验SQL语句的正确性;
S103:对SQL语句遍历所有优化规则,优化SQL语句;
S104:输出优化后的SQL语句并记录耗时;
S105:生成优化报告,并记录到数据库。
其中,优化特征包括以下至少一项:执行出错、影响执行效率、执行顺序有问题、执行耗时长、索引问题导致全表查询、丢失索引、嵌套多级子查询;优化报告包括如下字段:应用程序、数据库类型、SQL语句、执行耗时、问题描述。
优化规则由普通优化规则和自定义优化规则组成;自定义优化规则主要是对普通优化规则的补充,针对不同的使用群体,个性化定义优化的强度,如限定SQL的表的关联数量,返回字段不能超过10个等。
步骤S101具体包括:将SQL语句发送给SQL Server执行并记录执行耗时,若触发优化特征阀值,则SQL语句符合优化特征。
步骤S102具体包括:将SQL语句发送给SQL Server,
若SQL语句在SQL Server中运行不报错,则SQL语句正确;
若SQL语句在SQL Server中运行有报错消息,则输出报错信息。
普通优化规则包括:
若SQL语句中包含select*语句,则将*替换为对应的表字段;优化搜索字段,避免全表查询;
若SQL语句进行全表扫描操作,则在where子句中使用!=或<>操作符;使用不等于操作符,排除多余字段;
若where子句中对字段进行操作,则在where子句中对字段进行函数操作;如wheresubstring(name,1,3)='abc'--name以abc开头的id,优化后则为:where name like'abc%';
若where子句中使用索引,则在where子句中的“=”左边进行函数、算术运算或其他表达式运算;
若where子句中含有操作符in,则用操作符exists代替操作符in。
优化例子如下:
检查SQL中是否带*,如SELECT*FROM,优化规则:细致到字段级别。
查询的模糊匹配,如LIKE'%parm1%'——百分号会导致相关列的索引无法使用。
在WHERE语句中,尽量避免对索引字段进行计算操作,如where to_date(create_date)。
例1:优化前的SQL语句:SELECT*FROM emp;优化后的SQL语句:SELECT emp.ename,emp.job FROM emp。
例2:优化前的SQL语句:SELECT ename FROM emp where ename LIKE'%小%';优化后的SQL语句:SELECT ename FROM emp where ename LIKE'小%'。
例3:优化前的SQL语句:SELECT ename FROM emp where eage-10>20;优化后的SQL语句:SELECT ename FROM emp where ename eage>10+20'。
本申请实施例2提供一种基于复杂SQL的自动优化装置,采用上述方法进行优化数据,包括:
接收筛选模块,接收并从中筛选具有优化特征的SQL语句;
验证模块,用于检验所述SQL语句的正确性;
优化模块,用于对所述SQL语句遍历所有优化规则,优化所述SQL语句;输出模块,用于输出优化后的所述SQL语句;
监控模块,用于监控优化后的所述SQL语句的执行耗时;
报告生成模块,用于生成SQL优化报告。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。

Claims (10)

1.一种基于复杂SQL的自动优化方法,其特征在于,包括:
接收并从中筛选具有优化特征的SQL语句;
根据基本规则,检验所述SQL语句的正确性;
对所述SQL语句遍历所有优化规则,优化所述SQL语句;
输出优化后的所述SQL语句并记录耗时;
生成优化报告,并记录到数据库;
其中,所述优化特征包括以下至少一项:执行出错、影响执行效率、执行顺序有问题、执行耗时长、索引问题导致全表查询、丢失索引、嵌套多级子查询;所述优化报告包括如下字段:应用程序、数据库类型、SQL语句、执行耗时、问题描述。
2.根据权利要求1所述一种基于复杂SQL的自动优化方法,其特征在于,所述筛选出具有优化特征的SQL语句,具体包括:
将所述SQL语句发送给SQL Server执行并记录执行耗时,若触发优化特征阀值,则所述SQL语句符合所述优化特征。
3.根据权利要求1所述一种基于复杂SQL的自动优化方法,其特征在于,所述优化规则包括普通优化规则和自定义优化规则。
4.根据权利要求3所述的一种基于复杂SQL的自动优化方法,其特征在于,所述普通优化规则包括:
若所述SQL语句中包含select*语句,则将*替换为对应的表字段;
若所述SQL语句进行全表扫描操作,则在where子句中使用!=或<>操作符;
若where子句中对字段进行操作,则在where子句中对字段进行函数操作;
若where子句中使用索引,则在where子句中的“=”左边进行函数、算术运算或其他表达式运算;
若where子句中含有操作符in,则用操作符exists代替操作符in。
5.根据权利要求1-4任一项所述的一种基于复杂SQL的自动优化方法,其特征在于,所述根据基本规则,检验所述SQL语句的正确性,具体包括:
将所述SQL语句发送给SQL Server,
若所述SQL语句在SQL Server中运行不报错,则所述SQL语句正确;
若所述SQL语句在SQL Server中运行有报错消息,则输出所述报错信息。
6.一种基于复杂SQL的自动优化装置,其特征在于,包括:
接收筛选模块,接收并从中筛选具有优化特征的SQL语句;
验证模块,用于根据基本规则,检验所述SQL语句的正确性;
优化模块,用于对所述SQL语句遍历所有优化规则,优化所述SQL语句;
输出模块,用于输出优化后的所述SQL语句;
监控模块,用于监控优化后的所述SQL语句的执行耗时;
报告生成模块,用于生成SQL优化报告;
其中,所述优化特征包括以下至少一项:执行出错、影响执行效率、执行顺序有问题、执行耗时长、索引问题导致全表查询、丢失索引、嵌套多级子查询;所述优化报告包括如下字段:应用程序、数据库类型、SQL语句、执行耗时、问题描述。
7.根据权利要求6所述的一种基于复杂SQL的自动优化装置,其特征在于,所述筛选出具有优化特征的SQL语句,具体包括:
将所述SQL语句发送给SQL Server执行并记录执行耗时,若触发优化特征阀值,则所述SQL语句符合所述优化特征。
8.根据权利要求6所述的一种基于复杂SQL的自动优化装置,其特征在于,所述优化规则包括普通优化规则和自定义优化规则。
9.根据权利要求8所述的一种基于复杂SQL的自动优化装置,其特征在于,所述普通优化规则包括:
若所述SQL语句中包含select*语句,则将*替换为对应的表字段;
若所述SQL语句进行全表扫描操作,则在where子句中使用!=或<>操作符;
若where子句中对字段进行操作,则在where子句中对字段进行函数操作;
若where子句中使用索引,则在where子句中的“=”左边进行函数、算术运算或其他表达式运算;
若where子句中含有操作符in,则用操作符exists代替操作符in。
10.根据权利要求6-9任一项所述的一种基于复杂SQL的自动优化装置,其特征在于,检验所述SQL语句的正确性,具体包括:
将所述SQL语句发送给SQL Server,
若所述SQL语句在SQL Server中运行不报错,则所述SQL语句正确;
若所述SQL语句在SQL Server中运行有报错消息,则输出所述报错信息。
CN202011160947.0A 2020-10-27 2020-10-27 一种基于复杂sql的自动优化方法和装置 Active CN112347120B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011160947.0A CN112347120B (zh) 2020-10-27 2020-10-27 一种基于复杂sql的自动优化方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011160947.0A CN112347120B (zh) 2020-10-27 2020-10-27 一种基于复杂sql的自动优化方法和装置

Publications (2)

Publication Number Publication Date
CN112347120A true CN112347120A (zh) 2021-02-09
CN112347120B CN112347120B (zh) 2022-04-01

Family

ID=74359066

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011160947.0A Active CN112347120B (zh) 2020-10-27 2020-10-27 一种基于复杂sql的自动优化方法和装置

Country Status (1)

Country Link
CN (1) CN112347120B (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113064925A (zh) * 2021-03-15 2021-07-02 深圳依时货拉拉科技有限公司 一种大数据查询方法、系统及计算机可读存储介质
CN113553339A (zh) * 2021-07-13 2021-10-26 杭州安恒信息技术股份有限公司 数据查询方法、中间件、电子装置和存储介质

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120084315A1 (en) * 2010-10-04 2012-04-05 Sybase, Inc. Query Plan Optimization for Prepared SQL Statements
CN104965861A (zh) * 2015-06-03 2015-10-07 上海新炬网络信息技术有限公司 一种数据访问监控装置
WO2016088281A1 (en) * 2014-12-01 2016-06-09 Nec Corporation Multiple query optimization in sql-on- hadoop systems
CN106021071A (zh) * 2016-05-04 2016-10-12 北京思特奇信息技术股份有限公司 一种监控sql运行过程的方法和系统
CN106919678A (zh) * 2017-02-27 2017-07-04 武汉珞佳伟业科技有限公司 一种数据库查询优化系统及方法
CN108595721A (zh) * 2018-08-01 2018-09-28 四川长虹电器股份有限公司 一种sql优化系统及自动化sql优化方法
CN111078665A (zh) * 2019-12-09 2020-04-28 苏宁金融科技(南京)有限公司 确定hive任务的优化信息的方法、装置、计算机设备和介质

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120084315A1 (en) * 2010-10-04 2012-04-05 Sybase, Inc. Query Plan Optimization for Prepared SQL Statements
WO2016088281A1 (en) * 2014-12-01 2016-06-09 Nec Corporation Multiple query optimization in sql-on- hadoop systems
CN104965861A (zh) * 2015-06-03 2015-10-07 上海新炬网络信息技术有限公司 一种数据访问监控装置
CN106021071A (zh) * 2016-05-04 2016-10-12 北京思特奇信息技术股份有限公司 一种监控sql运行过程的方法和系统
CN106919678A (zh) * 2017-02-27 2017-07-04 武汉珞佳伟业科技有限公司 一种数据库查询优化系统及方法
CN108595721A (zh) * 2018-08-01 2018-09-28 四川长虹电器股份有限公司 一种sql优化系统及自动化sql优化方法
CN111078665A (zh) * 2019-12-09 2020-04-28 苏宁金融科技(南京)有限公司 确定hive任务的优化信息的方法、装置、计算机设备和介质

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
屈志坚 等: ""容错存储的电力系统监测数据查询优化技术"", 《电网技术》 *

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113064925A (zh) * 2021-03-15 2021-07-02 深圳依时货拉拉科技有限公司 一种大数据查询方法、系统及计算机可读存储介质
CN113553339A (zh) * 2021-07-13 2021-10-26 杭州安恒信息技术股份有限公司 数据查询方法、中间件、电子装置和存储介质
CN113553339B (zh) * 2021-07-13 2024-03-19 杭州安恒信息技术股份有限公司 数据查询方法、中间件、电子装置和存储介质

Also Published As

Publication number Publication date
CN112347120B (zh) 2022-04-01

Similar Documents

Publication Publication Date Title
Ying et al. Predicting source code changes by mining change history
US10445309B2 (en) Managing record format information
US7047249B1 (en) Method and apparatus for executing stored code objects in a database
US8005807B2 (en) Object oriented query path expression to relational outer join translator method, system, and article of manufacture, and computer program product
US7254810B2 (en) Apparatus and method for using database knowledge to optimize a computer program
Hartig SPARQL for a Web of Linked Data: Semantics and computability
US20100017395A1 (en) Apparatus and methods for transforming relational queries into multi-dimensional queries
US7418449B2 (en) System and method for efficient enrichment of business data
US20080172408A1 (en) Converting Recursive Hierarchical Data to Relational Data
US20090070300A1 (en) Method for Processing Data Queries
JP5791149B2 (ja) データベース・クエリ最適化のためのコンピュータで実装される方法、コンピュータ・プログラム、およびデータ処理システム
CN112347120B (zh) 一种基于复杂sql的自动优化方法和装置
CN107766353B (zh) 一种数据库统计信息迁移的方法和设备
US20210390038A1 (en) Automatic evaluation of test code quality
CN109241104B (zh) 决策型分布式数据库系统中aisql的解析器及其实现方法
US11487742B2 (en) Consistency checks between database systems
CN112989782A (zh) 一种自动化模板配置及报告生成的方法
US10223390B2 (en) Automatic data store architecture detection
CN108959454B (zh) 一种提示子句指定方法、装置、设备及存储介质
Gardikiotis et al. A two-folded impact analysis of schema changes on database applications
US20070220058A1 (en) Management of statistical views in a database system
EP0990983A1 (en) Automation of the design recovery and forward engineering of legacy applications
US11556531B2 (en) Crux detection in search definitions
CN113626423B (zh) 业务数据库的日志管理方法、装置、系统
CN117055895B (zh) 一种将sql语句转换为http接口的方法、系统和可读介质

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