CN110399377A - Sql的优化方法、装置、电子设备及计算机可读存储介质 - Google Patents

Sql的优化方法、装置、电子设备及计算机可读存储介质 Download PDF

Info

Publication number
CN110399377A
CN110399377A CN201910818549.4A CN201910818549A CN110399377A CN 110399377 A CN110399377 A CN 110399377A CN 201910818549 A CN201910818549 A CN 201910818549A CN 110399377 A CN110399377 A CN 110399377A
Authority
CN
China
Prior art keywords
sql
sub
index information
data
key column
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.)
Pending
Application number
CN201910818549.4A
Other languages
English (en)
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.)
Beijing Neusoft Wang Hai Technology Co Ltd
Original Assignee
Beijing Neusoft Wang Hai Technology 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 Beijing Neusoft Wang Hai Technology Co Ltd filed Critical Beijing Neusoft Wang Hai Technology Co Ltd
Priority to CN201910818549.4A priority Critical patent/CN110399377A/zh
Publication of CN110399377A publication Critical patent/CN110399377A/zh
Pending legal-status Critical Current

Links

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/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • 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)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computational Linguistics (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对应的数据表中关键列不存在索引信息时,生成对应的索引信息,并基于所述索引信息对所述子SQL进行更新,得到更新后的子SQL。本申请不需要专业的技术人员或数据库管理员进行人工排查,不仅减少了排查的难度、工作量和时间成本,而且,通过对子SQL进行自动化优化,提高了系统效率,提升了用户体验。

Description

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进行更新,得到更新后的子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进行自动化优化,提高了系统效率,提升了用户体验。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对本申请实施例描述中所需要使用的附图作简单地介绍。
图1为本申请一个实施例提供的一种结构化查询语言SQL的优化方法的流程示意图;
图2为本申请另一实施例提供的一种结构化查询语言SQL的优化方法的流程示意图;
图3为本申请又一实施例提供的一种结构化查询语言SQL的优化装置的结构示意图;
图4为本申请又一实施例提供的一种结构化查询语言SQL的优化的电子设备的结构示意图。
具体实施方式
下面详细描述本申请的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本申请,而不能解释为对本发明的限制。
本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本申请的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。应该理解,当我们称元件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在中间元件。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的全部或任一单元和全部组合。
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
本申请提供的结构化查询语言SQL的优化方法、装置、电子设备和计算机可读存储介质,旨在解决现有技术的如上技术问题。
下面以具体地实施例对本申请的技术方案以及本申请的技术方案如何解决上述技术问题进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。下面将结合附图,对本申请的实施例进行描述。
在一个实施例中提供了一种结构化查询语言SQL的优化的方法,如图1所示,该方法包括:
步骤S101,对待优化的结构化查询语言SQL进行分析,得到所述SQL中执行表扫描的子SQL,以及所述子SQL的资源开销;
其中,待优化的SQL可以是导致系统性能缓慢的SQL语句,可以由技术人员通过业务程序或专业的性能检测工具从完整的SQL中定位得到。
表扫描是对无索引的表进行查询时拟定的执行计划,表扫描是数据库用来查询表的每一条记录的过程,直到所有符合给定条件的记录返回为止。一般情况下,导致表扫描的原因除了索引缺失外,还有很多不规范的SQL写法导致即使表中存在索引也不会按照索引查询表中数据,常见的有where条件中索引列用到null关键字判断,索引字段和!=或<>操作符连用等。
步骤S102,当执行所述子SQL的资源开销超过预设的开销阈值时,检测所述子SQL对应的数据表中关键列是否存在索引信息;
在实际应用中,当数据库中数据表中关键列的数据量足够少时,采用表扫描或索引的方式对数据表中关键列进行查询时,执行效率是几乎相同的,所以,在本发明实施例中,可以设置一个开销阈值,当执行表扫描的子SQL对应的资源开销没有超过开销阈值,那么对该数据表中关键列执行表扫描是没有问题的。比如,预设的开销阈值为“CPU:5%”,某个数据表中关键列只有100行数据,那么对该数据表中关键列执行表扫描可能只需要占用CPU 0.001%的资源开销,那么此时就不需要检测该子SQL对应的数据表(也就是对哪个数据表中关键列执行该子SQL)中关键列是否存在索引信息了。具体地,可以检测子SQL中的where条件列、order by排序列、on关联列中至少一列上是否存在索引信息。
步骤S103,当所述子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的优化的方法,如图2所示,该方法包括:
步骤S201,对待优化的结构化查询语言SQL进行分析,得到所述SQL中执行表扫描的子SQL,以及所述子SQL的资源开销;
其中,待优化的SQL可以是导致系统性能缓慢的SQL语句,可以由技术人员通过业务程序或专业的性能检测工具从完整的SQL中定位得到。
需要说明的是,本发明实施例可以应用于SQL优化系统中,该系统可以安装在终端上,该终端可以具有如下特点:
(1)在硬件体系上,设备具备中央处理器、存储器、输入部件和输出部件,也就是说,设备往往是具备通信功能的微型计算机设备。另外,还可以具有多种输入方式,诸如键盘、鼠标、触摸屏、送话器和摄像头等,并可以根据需要进行调整输入。同时,设备往往具有多种输出方式,如受话器、显示屏等,也可以根据需要进行调整;
(2)在软件体系上,设备必须具备操作系统,如Windows Mobile、Symbian、Palm、Android、iOS等。同时,这些操作系统越来越开放,基于这些开放的操作系统平台开发的个性化应用程序层出不穷,如通信簿、日程表、记事本、计算器以及各类游戏等,极大程度地满足了个性化用户的需求;
(3)在通信能力上,设备具有灵活的接入方式和高带宽通信性能,并且能根据所选择的业务和所处的环境,自动调整所选的通信方式,从而方便用户使用。设备可以支持GSM(Global System for Mobile Communication,全球移动通信系统)、WCDMA(Wideband CodeDivision Multiple Access,宽带码分多址)、CDMA2000(Code Division MultipleAccess,码分多址)、TDSCDMA(Time Division-Synchronous Code Division MultipleAccess,时分同步码分多址)、Wi-Fi(Wireless-Fidelity,无线保真)以及WiMAX(WorldwideInteroperability for Microwave Access,全球微波互联接入)等,从而适应多种制式网络,不仅支持语音业务,更支持多种无线数据业务;
(4)在功能使用上,设备更加注重人性化、个性化和多功能化。随着计算机技术的发展,设备从“以设备为中心”的模式进入“以人为中心”的模式,集成了嵌入式计算、控制技术、人工智能技术以及生物认证技术等,充分体现了以人为本的宗旨。由于软件技术的发展,设备可以根据个人需求调整设置,更加个性化。同时,设备本身集成了众多软件和硬件,功能也越来越强大。
通常来说,当数据库中数据表中关键列的数据量足够少时,采用表扫描或索引的方式对数据表中关键列进行查询时,执行效率是几乎相同的。比如,某个数据表中关键列包含300条数据,那么对该数据表中关键列进行查询时,采用表扫描或者索引的方式几乎是没有区别的,甚至采用表扫描的方式比索引的方式的执行效率更高。
其中,表扫描是对无索引的表进行查询时拟定的执行计划,表扫描是数据库用来查询表的每一条记录的过程,直到所有符合给定条件的记录返回为止。一般情况下,导致表扫描的原因除了索引缺失外,还有很多不规范的SQL写法导致即使表中存在索引也不会按照索引查询表中数据,常见的有where条件中索引列用到null关键字判断,索引字段和!=或<>操作符连用等。
但是,在实际应用中,企业级数据库中的数据量不可能这么少,通常都是十万级、百万级,甚至千万级,所以,在这种情况下,如果还是采用表扫描的方式会导致系统的执行效率急剧下降甚至宕机。
因此,本发明实施例在获取到待优化的SQL后,需要进一步获取其中执行表扫描的子SQL。其中,待优化的SQL可以是一句SQL语句,也可以是一段SQL语句,一段SQL语句包含多个子SQL语句。
在本发明一种优选实施例中,所述对待优化的结构化查询语言SQL进行分析,得到所述SQL中执行表扫描的子SQL,以及所述子SQL的资源开销的步骤,包括:
对所述SQL对应的执行计划进行分析,确定出所述SQL中执行表扫描的子SQL;
获取所述执行计划中所述子SQL对应的资源开销字段的数值,并将所述数值作为所述子SQL的资源开销。
具体而言,数据库可以包括多个数据表,每个数据表都对应一个执行计划,执行计划是数据库对一个SQL每一步执行的分解,一般情况下,SQL语句是依据执行计划来执行的。执行计划是用于预执行的,执行计划里还包含有执行路径,一个子SQL对应一个执行路径,执行路径中包括有表征该子SQL资源开销的字段,比如,某个子SQL对应的资源开销为“CPU:20%”,那么就表示在执行该子SQL的时候需要占用CPU 20%的资源。所以,在本发明实施例中,对待优化的SQL对应的执行计划进行分解,就可以得知该SQL中有多少子SQL是执行表扫描的,然后获取执行表扫描的子SQL对应的资源开销字段的数值,就可以确定执行该子SQL所需要的资源开销了。
需要说明的是,上述资源开销的字段仅仅用于举例说明,在实际应用中,除了可以包含CPU的资源开销外,还可以包含其它资源的开销,本发明实施例对此不作限制。
进一步,在实际应用中,待优化的SQL中可能包含多个执行表扫描的子SQL,为方便描述,在本发明发明实施例中,仅以针对一个子SQL进行优化进行举例说明。
步骤S202,当执行所述子SQL的资源开销超过预设的开销阈值时,检测所述子SQL对应的数据表中关键列是否存在索引信息;
在实际应用中,当数据库中数据表中关键列的数据量足够少时,采用表扫描或索引的方式对数据表中关键列进行查询时,执行效率是几乎相同的,所以,在本发明实施例中,可以设置一个开销阈值,当执行表扫描的子SQL对应的资源开销没有超过开销阈值,那么对该数据表中关键列执行表扫描是没有问题的。比如,预设的开销阈值为“CPU:5%”,某个数据表中关键列只有100行数据,那么对该数据表中关键列执行表扫描可能只需要占用CPU 0.001%的资源开销,那么此时就不需要检测该子SQL对应的数据表(也就是对哪个数据表中关键列执行该子SQL)中关键列是否存在索引信息了。具体地,可以检测子SQL中的where条件列、order by排序列、on关联列中至少一列上是否存在索引信息。
步骤S203,当所述子SQL对应的数据表中关键列不存在索引信息时,生成对应的索引信息,并基于所述索引信息对所述子SQL进行更新,得到更新后的子SQL;
如果该子SQL对应的数据表中关键列不存在索引信息,那么就可以为该数据表中关键列建立索引信息。并且,因为该子SQL已经具有了索引信息,所以,可以对该子SQL的写法加以修改,得到更新后的子SQL,这样下次在执行该子SQL的时候就可以采用索引的方式了。生成索引信息的目的在于避免子SQL因数据表中关键列缺失索引而执行表扫描的情况,从而自动创建必要的索引信息。
在本发明一种优选实施例中,所述当所述子SQL对应的数据表中关键列不存在索引信息时,生成对应的索引信息的步骤,包括:
当所述子SQL对应的数据表中关键列不存在索引信息时,获取所述SQL对应的数据表中关键列的数据总量;
当所述数据总量超过预设的数据总量阈值时,生成对应的索引信息。
在实际应用中,当数据库中数据表中关键列的数据量足够少时,采用表扫描或索引的方式对数据表中关键列进行查询时,执行效率是几乎相同的,所以,在建立索引信息之前,可以先确定数据表中关键列的数据总量是多少,如果数据总量超过了数据总量阈值时,那么就可以为该数据表中关键列生成索引信息了。比如,预设的数据总量阈值为1万,执行表扫描的子SQL对应的关键列的数据总量为1.5万,那么就可以为该数据表中关键列生成索引信息。
步骤S204,当所述子SQL对应的数据表中关键列存在索引信息时,计算所述索引信息的离散度;
在很多情况下,数据表中关键列的数据分布决定了SQL的写法,SQL优化很重要的一点就是清楚数据表中关键列的数据分布,本发明实施例会根据索引信息的离散度判断表扫描是否更高效。
具体地,离散度通过对索引信息字段分组统计后计算方差获得,离散度计算公式可以为:计算结果越大,离散度越高;其中,x为分组统计后各分组的计数值,为分组后各分组计数值的平均值,n为统计后产生的分组个数。
步骤S205,当所述离散度超过预设的离散度阈值时,获取所述子SQL对应的数据表的统计信息;
比如,可以设置为当索引信息字段的离散度大于20%时,表扫描将变得更有效。这样,当步骤S204中得到的离散度超过预设的离散度阈值时,就表明该子SQL对应的数据表中关键列可以采用表扫描的方式进行查询,不需要进行优化。
为了使得数据表中关键列的数据和数据表中关键列对应的索引信息保持同步,可以对经过表扫描的进行一次统计信息的收集,使得优化后的子SQL在下一次执行查询时可以命中索引。
步骤S206,当所述离散度未超过所述离散度阈值时,基于所述索引信息对所述子SQL进行更新,得到更新后的子SQL;
如果步骤S204中得到的离散度没有超过预设的离散度阈值时,就表明该子SQL对应的数据表中关键列不适合采用表扫描的方式进行查询,需要进行优化。具体地,可以对该子SQL的写法加以修改,得到更新后的子SQL,这样下次在执行该子SQL的时候就可以采用索引的方式了。
步骤S207,记录所述子SQL未命中索引信息的相关信息;所述子SQL未命中索引信息包括所述子SQL对应的数据表中关键列不存在索引信息和所述索引信息的离散度未超过所述离散度阈值;
具体而言,未命中索引指的是数据表中关键列不存在索引信息,或者,数据表中关键列存在索引信息且该索引信息的离散度未超过所述离散度阈值(SQL的写法不规范)。在这种情况下,命中索引信息的查询效率要远远高于表扫描的查询效率,但是由于上述原因导致未命中索引信息,从而使得查询效率急剧下降。
步骤S208,输出并保存所述相关信息和更新后的子SQL。
在实际应用中,SQL优化系统可以将子SQL未命中索引的相关信息,以及更新后的子SQL进行输出并保存,方便用户查看。
需要说明的是,如果待优化的SQL中包含多个执行表扫描的子SQL,那么针对每一个子SQL重复执行步骤S201~步骤S208即可。
在本发明实施例中,先对待优化的结构化查询语言SQL进行执行计划分析,得到所述SQL中执行表扫描的子SQL,以及所述子SQL的资源开销,当执行所述子SQL的资源开销超过预设的开销阈值时,检测所述子SQL对应的数据表中关键列是否存在索引信息,当所述子SQL对应的数据表中关键列不存在索引信息时,生成对应的索引信息,并基于所述索引信息对所述子SQL进行更新,得到更新后的子SQL。这样,在确定了待优化SQL中执行表扫描的子SQL后,自动化地对该子SQL进行合理性判断,如果该子SQL执行表扫描不合理,那么就会自动化对该子SQL对应的数据表中关键列建立索引信息,不需要专业的技术人员或数据库管理员进行人工排查,不仅减少了排查的难度、工作量和时间成本,而且,通过对子SQL进行自动化优化,提高了系统效率,提升了用户体验。
进一步,在执行表扫描的子SQL对应的数据表中关键列存在索引信息的情况下,对索引信息进行离散度分析,自动化判断子SQL执行表扫描是否更有效,并基于判断结果进一步判断是否需要对该SQL进行优化,使得针对SQL的优化更加精确。
更进一步,针对数据库系统的性能问题,可以不再需要专业的开发人员和数据库管理员才能解决,普通的工作人员也可以。这样,在数据库系统出现紧急的性能问题时,现场的工作人员也可以在第一时间获取优化后的SQL语句加以执行,更好的提升客户体验。
图3为本申请又一实施例提供的一种结构化查询语言SQL的优化装置的结构示意图,如图3所示,本实施例的装置可以包括:
分析模块301,用于对待优化的结构化查询语言SQL进行分析,得到所述SQL中执行表扫描的子SQL,以及所述子SQL的资源开销;
检测模块302,用于当执行所述子SQL的资源开销超过预设的开销阈值时,检测所述子SQL对应的数据表中关键列是否存在索引信息;
生成模块303,用于当所述子SQL对应的数据表中关键列不存在索引信息时,生成对应的索引信息;
更新模块304,用于基于所述索引信息对所述子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进行合理性判断,如果该子SQL执行表扫描不合理,那么就会自动化对该子SQL对应的数据表中关键列建立索引信息,不需要专业的技术人员或数据库管理员进行人工排查,不仅减少了排查的难度、工作量和时间成本,而且,通过对子SQL进行自动化优化,提高了系统效率,提升了用户体验。
在一个可选实施例中提供了一种电子设备,如图4所示,图4所示的电子设备4000包括:处理器4001和存储器4003。其中,处理器4001和存储器4003相连,如通过总线4002相连。可选地,电子设备4000还可以包括收发器4004。需要说明的是,实际应用中收发器4004不限于一个,该电子设备4000的结构并不构成对本申请实施例的限定。
处理器4001可以是CPU,通用处理器,DSP,ASIC,FPGA或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本申请公开内容所描述的各种示例性的逻辑方框,模块和电路。处理器4001也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,DSP和微处理器的组合等。
总线4002可包括一通路,在上述组件之间传送信息。总线4002可以是PCI总线或EISA总线等。总线4002可以分为地址总线、数据总线、控制总线等。为便于表示,图4中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
存储器4003可以是ROM或可存储静态信息和指令的其他类型的静态存储设备,RAM或者可存储信息和指令的其他类型的动态存储设备,也可以是EEPROM、CD-ROM或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。
存储器4003用于存储执行本申请方案的应用程序代码,并由处理器4001来控制执行。处理器4001用于执行存储器4003中存储的应用程序代码,以实现前述任一方法实施例所示的内容。
其中,电子设备包括但不限于:移动电话、笔记本电脑、数字广播接收器、PDA(个人数字助理)、PAD(平板电脑)、PMP(便携式多媒体播放器)、车载终端(例如车载导航终端)等等的移动终端以及诸如数字TV、台式计算机等等的固定终端。
本申请的又一实施例提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,当其在计算机上运行时,使得计算机可以执行前述方法实施例中相应内容。与现有技术相比,在本发明实施例中,先对待优化的结构化查询语言SQL进行分析,得到所述SQL中执行表扫描的子SQL,以及所述子SQL的资源开销,当执行所述子SQL的资源开销超过预设的开销阈值时,检测所述子SQL对应的数据表中关键列是否存在索引信息,当所述子SQL对应的数据表中关键列不存在索引信息时,生成对应的索引信息,并基于所述索引信息对所述子SQL进行更新,得到更新后的子SQL。这样,在确定了待优化SQL中执行表扫描的子SQL后,自动化地对该子SQL进行合理性判断,如果该子SQL执行表扫描不合理,那么就会自动化对该子SQL对应的数据表中关键列建立索引信息,不需要专业的技术人员或数据库管理员进行人工排查,不仅减少了排查的难度、工作量和时间成本,而且,通过对子SQL进行自动化优化,提高了系统效率,提升了用户体验。
应该理解的是,虽然附图的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,其可以以其他的顺序执行。而且,附图的流程图中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,其执行顺序也不必然是依次进行,而是可以与其他步骤或者其他步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
以上所述仅是本发明的部分实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

Claims (10)

1.一种结构化查询语言SQL的优化方法,其特征在于,包括:
对待优化的结构化查询语言SQL进行分析,得到所述SQL中执行表扫描的子SQL,以及所述子SQL的资源开销;
当执行所述子SQL的资源开销超过预设的开销阈值时,检测所述子SQL对应的数据表中关键列是否存在索引信息;
当所述子SQL对应的数据表中关键列不存在索引信息时,生成对应的索引信息,并基于所述索引信息对所述子SQL进行更新,得到更新后的子SQL。
2.根据权利要求1所述的结构化查询语言SQL的优化方法,其特征在于,还包括:
当所述子SQL对应的数据表中关键列存在索引信息时,计算所述索引信息的离散度;
当所述离散度超过预设的离散度阈值时,获取所述子SQL对应的数据表的统计信息;
当所述离散度未超过所述离散度阈值时,基于所述索引信息对所述子SQL进行更新,得到更新后的子SQL。
3.根据权利要求1或2所述的结构化查询语言SQL的优化方法,其特征在于,所述对待优化的结构化查询语言SQL进行分析,得到所述SQL中执行表扫描的子SQL,以及所述子SQL的资源开销的步骤,包括:
对所述SQL对应的执行计划进行分析,确定出所述SQL中执行表扫描的子SQL;
获取所述执行计划中所述子SQL对应的资源开销字段的数值,并将所述数值作为所述子SQL的资源开销。
4.根据权利要求1或2所述的结构化查询语言SQL的优化方法,其特征在于,所述当所述子SQL对应的数据表中关键列不存在索引信息时,生成对应的索引信息的步骤,包括:
当所述子SQL对应的数据表中关键列不存在索引信息时,获取所述SQL对应的数据表中关键列的数据总量;
当所述数据总量超过预设的数据总量阈值时,生成对应的索引信息。
5.根据权利要求1或2所述的结构化查询语言SQL的优化方法,其特征在于,在基于所述索引信息对所述子SQL进行更新,得到更新后的子SQL的步骤之前,还包括:
记录所述子SQL未命中索引信息的相关信息;所述子SQL未命中索引包括所述子SQL对应的数据表中关键列不存在索引信息和所述索引信息的离散度未超过所述离散度阈值。
6.根据权利要求5所述的结构化查询语言SQL的优化方法,其特征在于,还包括:
输出并保存所述相关信息和更新后的子SQL。
7.一种结构化查询语言SQL的优化装置,其特征在于,包括:
分析模块,用于对待优化的结构化查询语言SQL进行分析,得到所述SQL中执行表扫描的子SQL,以及所述子SQL的资源开销;
检测模块,用于当执行所述子SQL的资源开销超过预设的开销阈值时,检测所述子SQL对应的数据表中关键列是否存在索引信息;
生成模块,用于当所述子SQL对应的数据表中关键列不存在索引信息时,生成对应的索引信息;
更新模块,用于基于所述索引信息对所述子SQL进行更新,得到更新后的子SQL。
8.根据权利要求7所述的结构化查询语言SQL的优化装置,其特征在于,还包括:
计算模块,用于当所述子SQL对应的数据表中关键列存在索引信息时,计算所述索引信息的离散度;
获取模块,用于当所述离散度超过预设的离散度阈值时,获取所述子SQL对应的数据表的统计信息;
所述更新模块,还用于当所述离散度未超过所述离散度阈值时,基于所述索引信息对所述子SQL进行更新,得到更新后的子SQL。
9.一种电子设备,其特征在于,其包括:
处理器、存储器和总线;
所述总线,用于连接所述处理器和所述存储器;
所述存储器,用于存储操作指令;
所述处理器,用于通过调用所述操作指令,执行上述权利要求1-6中任一项所述的结构化查询语言SQL的优化方法。
10.一种计算机可读存储介质,其特征在于,所述计算机存储介质用于存储计算机指令,当其在计算机上运行时,使得计算机可以执行上述权利要求1-6中任一项所述的结构化查询语言SQL的优化方法。
CN201910818549.4A 2019-08-30 2019-08-30 Sql的优化方法、装置、电子设备及计算机可读存储介质 Pending CN110399377A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910818549.4A CN110399377A (zh) 2019-08-30 2019-08-30 Sql的优化方法、装置、电子设备及计算机可读存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910818549.4A CN110399377A (zh) 2019-08-30 2019-08-30 Sql的优化方法、装置、电子设备及计算机可读存储介质

Publications (1)

Publication Number Publication Date
CN110399377A true CN110399377A (zh) 2019-11-01

Family

ID=68329615

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910818549.4A Pending CN110399377A (zh) 2019-08-30 2019-08-30 Sql的优化方法、装置、电子设备及计算机可读存储介质

Country Status (1)

Country Link
CN (1) CN110399377A (zh)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110968593A (zh) * 2019-12-10 2020-04-07 上海达梦数据库有限公司 数据库sql语句优化方法、装置、设备和存储介质
CN111506559A (zh) * 2020-04-21 2020-08-07 北京同邦卓益科技有限公司 数据存储方法、装置、电子设备及存储介质
CN111797112A (zh) * 2020-06-05 2020-10-20 武汉大学 一种PostgreSQL预备语句执行优化方法
CN111881145A (zh) * 2020-07-31 2020-11-03 北京致远互联软件股份有限公司 业务数据表的处理方法、装置、服务器及存储介质
CN112199390A (zh) * 2020-09-30 2021-01-08 上海达梦数据库有限公司 一种数据库中数据查询方法、装置、设备及存储介质
CN113360362A (zh) * 2020-03-03 2021-09-07 北京沃东天骏信息技术有限公司 一种动态sql效率检查方法及插件

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
AU2015201361A1 (en) * 2014-11-14 2016-06-02 Tata Consultancy Services Limited A method and system for efficient performance prediction of structured query for big data
CN106919678A (zh) * 2017-02-27 2017-07-04 武汉珞佳伟业科技有限公司 一种数据库查询优化系统及方法
CN108388626A (zh) * 2018-02-12 2018-08-10 平安科技(深圳)有限公司 Sql自动优化方法、装置、计算机设备及存储介质
CN108460052A (zh) * 2017-02-22 2018-08-28 中兴通讯股份有限公司 一种自动创建索引的方法、装置及数据库系统
CN110019971A (zh) * 2017-09-21 2019-07-16 阿里巴巴集团控股有限公司 一种索引创建方法、装置及数据库系统

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
AU2015201361A1 (en) * 2014-11-14 2016-06-02 Tata Consultancy Services Limited A method and system for efficient performance prediction of structured query for big data
CN108460052A (zh) * 2017-02-22 2018-08-28 中兴通讯股份有限公司 一种自动创建索引的方法、装置及数据库系统
CN106919678A (zh) * 2017-02-27 2017-07-04 武汉珞佳伟业科技有限公司 一种数据库查询优化系统及方法
CN110019971A (zh) * 2017-09-21 2019-07-16 阿里巴巴集团控股有限公司 一种索引创建方法、装置及数据库系统
CN108388626A (zh) * 2018-02-12 2018-08-10 平安科技(深圳)有限公司 Sql自动优化方法、装置、计算机设备及存储介质

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
TOBYDEV: "数据库索引之离散度", 《HTTPS://WWW.CNBLOGS.COM/TOBY/ARCHIVE/2012/11/09/2763151.HTML》 *
WEIXIN_30707875: "数据库索引之离散度", 《HTTPS://BLOG.CSDN.NET/WEIXIN_30707875/ARTICLE/DETAILS/97633254》 *
张昉: "Oracle中SQL优化器的两种优化方式及使用", 《福建电脑》 *
朱有存: ""军卫一号"医嘱摆药查询优化", 《医疗卫生装备》 *

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110968593A (zh) * 2019-12-10 2020-04-07 上海达梦数据库有限公司 数据库sql语句优化方法、装置、设备和存储介质
CN113360362A (zh) * 2020-03-03 2021-09-07 北京沃东天骏信息技术有限公司 一种动态sql效率检查方法及插件
CN111506559A (zh) * 2020-04-21 2020-08-07 北京同邦卓益科技有限公司 数据存储方法、装置、电子设备及存储介质
CN111506559B (zh) * 2020-04-21 2024-04-05 北京同邦卓益科技有限公司 数据存储方法、装置、电子设备及存储介质
CN111797112A (zh) * 2020-06-05 2020-10-20 武汉大学 一种PostgreSQL预备语句执行优化方法
CN111797112B (zh) * 2020-06-05 2022-04-01 武汉大学 一种PostgreSQL预备语句执行优化方法
CN111881145A (zh) * 2020-07-31 2020-11-03 北京致远互联软件股份有限公司 业务数据表的处理方法、装置、服务器及存储介质
CN112199390A (zh) * 2020-09-30 2021-01-08 上海达梦数据库有限公司 一种数据库中数据查询方法、装置、设备及存储介质
CN112199390B (zh) * 2020-09-30 2023-05-30 上海达梦数据库有限公司 一种数据库中数据查询方法、装置、设备及存储介质

Similar Documents

Publication Publication Date Title
CN110399377A (zh) Sql的优化方法、装置、电子设备及计算机可读存储介质
CN103748579B (zh) 在映射化简框架中处理数据
CN109902105B (zh) 用于微服务架构的数据查询系统、方法、设备及存储介质
US10229200B2 (en) Linking data elements based on similarity data values and semantic annotations
CN103608809B (zh) 推荐数据富集
CN113342976B (zh) 一种自动采集处理数据的方法、装置、存储介质及设备
JP5791149B2 (ja) データベース・クエリ最適化のためのコンピュータで実装される方法、コンピュータ・プログラム、およびデータ処理システム
CN106293891B (zh) 多维投资指标监督方法
CN106484915B (zh) 一种海量数据的清洗方法和系统
CN105359139A (zh) 安全信息管理系统及安全信息管理方法
JP2013534334A (ja) 照会結果をソートするための方法および装置
CN102915269A (zh) 一种b/s软件系统的通用日志分析方法
TW201915777A (zh) 金融非結構化文本分析系統及其方法
CN111382182A (zh) 数据处理方法、装置、电子设备及存储介质
CN104537012B (zh) 数据处理方法和装置
CN110222046B (zh) 列表数据的处理方法、装置、服务器和存储介质
US11138194B2 (en) Method of extracting relationships from a NoSQL database
CN109684198B (zh) 待测试数据获取方法、装置、介质、电子设备
CN113609008A (zh) 测试结果分析方法、装置和电子设备
CN116860583A (zh) 数据库的性能优化方法、装置、存储介质及电子设备
CN102193859A (zh) 一种代码分析方法及系统
CN112214494B (zh) 检索方法及装置
CN108520012A (zh) 基于机器学习的移动互联网用户评论挖掘方法
CN114064606A (zh) 数据库迁移方法、装置、设备、存储介质和系统
US20140164397A1 (en) Apparatus and method for searching information

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
CB02 Change of applicant information

Address after: 801-2, floor 8, building 3, No. 22, Ronghua Middle Road, Beijing Economic and Technological Development Zone, Daxing District, Beijing

Applicant after: Wanghai Kangxin (Beijing) Technology Co.,Ltd.

Address before: Room 07, Room 2, Building B, 12 Hongda North Road, Beijing Daxing District, Beijing

Applicant before: BEIJING NEUSOFT VIEWHIGH TECHNOLOGY Co.,Ltd.

CB02 Change of applicant information
RJ01 Rejection of invention patent application after publication

Application publication date: 20191101

RJ01 Rejection of invention patent application after publication