CN110297858B - 执行计划的优化方法、装置、计算机设备和存储介质 - Google Patents

执行计划的优化方法、装置、计算机设备和存储介质 Download PDF

Info

Publication number
CN110297858B
CN110297858B CN201910449873.3A CN201910449873A CN110297858B CN 110297858 B CN110297858 B CN 110297858B CN 201910449873 A CN201910449873 A CN 201910449873A CN 110297858 B CN110297858 B CN 110297858B
Authority
CN
China
Prior art keywords
result set
limit
execution plan
result
sorting
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
Application number
CN201910449873.3A
Other languages
English (en)
Other versions
CN110297858A (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.)
SuningCom Co ltd
Original Assignee
Suning Cloud Computing 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 Suning Cloud Computing Co Ltd filed Critical Suning Cloud Computing Co Ltd
Priority to CN201910449873.3A priority Critical patent/CN110297858B/zh
Publication of CN110297858A publication Critical patent/CN110297858A/zh
Application granted granted Critical
Publication of CN110297858B publication Critical patent/CN110297858B/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/25Integrating or interfacing systems involving database management systems
    • G06F16/252Integrating or interfacing systems involving database management systems between a Database Management System and a front-end application

Landscapes

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

Abstract

本发明公开了一种执行计划的优化方法装置、计算机设备和存储介质,该方法包括:获取查询请求,解析出查询请求所采用的操作方式以及对应的场景,其中操作方式包括全外连接、联合、左外连接、右外连接以及内连接;结合操作方式以及场景,将汇总和/或limit操作按照预设的策略下推,生成执行计划;按照执行计划在数据库中执行相应操作,输出查询结果。本发明通过将汇总、limit等操作下推到数据库中,充分利用数据库的优势,提升了查询统计性能以及资源利用率,解决复杂的数据分析带来的延时问题,避免了druid这类数据库在高基数汇总时存在的限制,数据分析支持SQL,易用性较好且支持复杂的数据分析场景,数据存储支持分布式的支持横向扩展、高并发的查询。

Description

执行计划的优化方法、装置、计算机设备和存储介质
技术领域
本发明涉及技术领域,特别涉及一种执行计划的优化方法、装置、计算机设备和存储介质。
背景技术
在互联网企业,对海量数据的数据分析越来越重视,涉及的业务场景也越来越复杂。如果直接对亿级以上的明细数据进行汇总统计,存储代价和计算代价都非常大。现有的执行计划优化方案一般是将谓词下推(predicate pushdown),即将过滤条件尽可能的下推到数据库中,从而使物理执行跳过无关数据,加速执行过程,但是这种方案一般适用于普通数据库。在大数据olap分析领域,数据量特别巨大,甚至可以达到千亿级。因此出现了druid、pinot等一些MOLAP数据库,这些数据库都会对维度进行倒排索引,因此在过滤上特别高效,而且可以适用于任何维度组合,这个和传统数据库的索引有着明显区别。同时这类数据库也会对汇总、limit等算法进行优化。例如druid在对单维度进行分组汇总时,可以在每个历史节点都进行下推操作,使得性能大为提升。
在进行olap(联机分析处理)分析时,越来越多的数据分析产品使用spark、presto、drill等SQL引擎,这些引擎可以和众多的数据存储进行整合,例如hive、mysql、hbase、ES等,而且可以在不同的数据源之间进行关联操作。同时也可以和druid、pinot、clickhouse等olap数据库进行整合,通过标准SQL语句来分析汇总olap数据库中的数据。对于单表汇总查询,一般对执行计划进行解析,然后将其翻译成相应的查询语句,在解析过程中,尽量将过滤、汇总、limit等下推到olap数据库中,以充分利用olap数据库的优势。
在进行多表join和union等操作时,SQL引擎一般采用的执行计划优化方案,包括map join、hashed join、nested loop broadcast、sort merge等算法。这些算法一般只是将过滤条件下推到olap数据库中,不会将limit下推到olap数据库中,因此会从olap数据库中返回全量汇总数据,这样会导致数据库的计算量巨大且不能充分利用druid等数据库的优势等问题。
发明内容
为了解决现有技术的问题,本发明实施例提供了一种执行计划的优化方法、装置、计算机设备和存储介质,以克服现有技术中数据库中返回全量汇总数据导致数据库计算量大、增加网络传输压力以及响应时间长等问题。
为解决上述一个或多个技术问题,本发明采用的技术方案是:
第一方面,提供了一种执行计划的优化方法,该方法包括如下步骤:
获取查询请求,解析出所述查询请求所采用的操作方式以及对应的场景,其中所述操作方式包括全外连接、联合、左外连接、右外连接以及内连接;
结合所述操作方式以及所述场景,将汇总和/或limit操作按照预设的策略下推,生成执行计划;
按照所述执行计划在数据库中执行相应操作,输出查询结果。
进一步的,当所述操作方式为全外连接或联合,所述场景为对汇总值不进行排序时,所述将汇总和/或limit操作按照预设的策略下推,生成执行计划包括:
对同期结果集以及本期结果集按照分析维度的组合进行排序后,将所述limit操作下推到数据库中。
进一步的,当所述操作方式为全外连接或联合,所述场景为对维度进行排序时,所述将汇总和/或limit操作按照预设的策略下推,生成执行计划包括:
检验排序字段与分析维度是否一致,若不一致,则将所述排序字段设置为与所述分析维度一致,对所述维度重新进行排序后,将所述limit操作下推到数据库中。
进一步的,当所述操作方式为全外连接或联合,所述场景为对汇总值进行排序时,所述将汇总和/或limit操作按照预设的策略下推,生成执行计划包括:
对汇总值进行排序的结果集进行汇总计算后,将所述汇总和所述limit操作均下推到数据库中,获取返回的第一结果集;
将所述第一结果集中的维度值作为过滤条件传给其余结果集,获取返回的第二结果集;
将所述第二结果集与所述第一结果集进行匹配,将匹配成功的结果补充至所述第一结果集中,生成最终的结果集。
进一步的,当所述操作方式为左外连接,所述场景为对汇总值不进行排序或对维度进行排序或对左表中的汇总值进行排序时,所述将汇总和/或limit操作按照预设的策略下推,生成执行计划包括:
将所述汇总操作、所述limit操作以及过滤操作直接下推到左表中,获取左表返回的结果集;
将所述左表返回的结果集中的维度值作为过滤条件,传到右表中,将右表的汇总结果与所述左表返回的结果集进行匹配,生成最终的结果集。
进一步的,当所述操作方式为左外连接,所述场景为对右表中的汇总值进行排序时,所述将汇总和/或limit操作按照预设的策略下推,生成执行计划包括:
设置下推参数以及放大比例;
根据所述下推参数判断是否满足下推的条件,若满足,则将所述limit操作中的limit值按照所述放大比例放大;
将放大后的所述limit操作与排序操作下推到右表中,获取右表返回的结果集;
将所述右表返回的结果集中的维度值作为过滤条件,传到左表中,将左表的汇总结果与所述右表返回的结果集进行匹配,生成最终的结果集。
进一步的,当所述操作方式为右外连接,所述场景为对汇总值不进行排序或对维度进行排序或对右表中的汇总值进行排序时,所述将汇总和/或limit操作按照预设的策略下推,生成执行计划包括:
将所述汇总操作、所述limit操作以及过滤操作直接下推到右表中,获取右表返回的结果集;
将所述右表返回的结果集中的维度值作为过滤条件,传到左表中,将左表的汇总结果与所述右表返回的结果集进行匹配,生成最终的结果集。
进一步的,当所述操作方式为右外连接,所述场景为对左表中的汇总值进行排序时,所述将汇总和/或limit操作按照预设的策略下推,生成执行计划包括:
根据下推参数判断是否满足下推的条件,若满足,则将所述limit操作中的limit值按照预设的放大比例放大;
将放大后的所述limit操作与排序操作下推到左表中,获取左表返回的结果集;
将所述左表返回的结果集中的维度值作为过滤条件,传到右表中,将右表的汇总结果与所述左表返回的结果集进行匹配,生成最终的结果集。
进一步的,当所述操作方式为内连接,所述场景为对汇总值不进行排序或对维度进行排序时,所述将汇总和/或limit操作按照预设的策略下推,生成执行计划包括:
将排序字段设置为与分析维度一致,对左表和右表的结果集进行排序,并则将所述limit操作中的limit值按照预设的放大比例放大,将放大后的所述limit操作下推到数据库中。
进一步的,当所述操作方式为内连接,所述场景为对汇总值进行排序时,所述将汇总和/或limit操作按照预设的策略下推,生成执行计划包括:
将所述limit操作中的limit值按照预设的放大比例放大,将放大后的所述limit操作下推到对汇总值进行排序的表中,获取返回的第三结果集;
将所述第三结果集中的维度值作为过滤条件传至另一个表中进行过滤汇总,获取返回的第四结果集;
将所述第三结果集与所述第四结果集进行匹配,返回匹配成功的结果集。
第二方面,提供了一种执行计划的优化装置,所述装置包括:
数据解析模块,用于获取查询请求,解析出所述查询请求所采用的操作方式以及对应的场景,其中所述操作方式包括全外连接、联合、左外连接、右外连接以及内连接;
计划生成模块,用于结合所述操作方式以及所述场景,将汇总和/或limit操作按照预设的策略下推,生成执行计划;
操作执行模块,用于按照所述执行计划在数据库中执行相应操作,输出查询结果。
进一步的,所述计划生成模块包括:
数据排序单元,用于对同期结果集以及本期结果集按照分析维度的组合进行排序后;
操作下推单元,用于将所述limit操作下推到数据库中。
进一步的,所述计划生成模块还包括:
检验单元,用于检验排序字段与分析维度是否一致;
维度设置单元,用于将所述排序字段设置为与所述分析维度一致;
所述排序单元还用于对所述维度重新进行排序。
进一步的,所述计划生成模块还包括:
汇总计算单元,用于对汇总值进行排序的结果集进行汇总计算后;
所述操作下推单元还用于将所述汇总和所述limit操作均下推到数据库中,获取返回的第一结果集;
条件传送单元,用于将所述第一结果集中的维度值作为过滤条件传给其余结果集,获取返回的第二结果集;
结果匹配单元,用于将所述第二结果集与所述第一结果集进行匹配,将匹配成功的结果补充至所述第一结果集中,生成最终的结果集。
进一步的,所述操作下推单元还用于将所述汇总操作、所述limit操作以及过滤操作直接下推到左表中,获取左表返回的结果集;
所述条件传送单元还用于将所述左表返回的结果集中的维度值作为过滤条件,传到右表中;
所述结果匹配单元还用于将右表的汇总结果与所述左表返回的结果集进行匹配,生成最终的结果集。
进一步的,所述计划生成模块还包括:
参数设置单元,用于设置下推参数以及放大比例;
判断单元,用于根据所述下推参数判断是否满足下推的条件;
放大单元,用于将所述limit操作中的limit值按照所述放大比例放大;
所述操作下推单元还用于将放大后的所述limit操作与排序操作下推到右表中,获取右表返回的结果集;
所述条件传送单元还用于将所述右表返回的结果集中的维度值作为过滤条件,传到左表中;
所述结果匹配单元还用于将左表的汇总结果与所述右表返回的结果集进行匹配,生成最终的结果集。
进一步的,所述操作下推单元还用于将所述汇总操作、所述limit操作以及过滤操作直接下推到右表中,获取右表返回的结果集。
进一步的,所述操作下推单元还用于将放大后的所述limit操作与排序操作下推到左表中,获取左表返回的结果集。
进一步的,所述数据排序单元还用于对左表和右表的结果集进行排序。
进一步的,所述操作下推单元还用于将放大后的所述limit操作下推到对汇总值进行排序的表中,获取返回的第三结果集;
所述条件传送单元还用于将所述第三结果集中的维度值作为过滤条件传至另一个表中进行过滤汇总,获取返回的第四结果集;
所述结果匹配单元还用于将所述第三结果集与所述第四结果集进行匹配,返回匹配成功的结果集。
第三方面,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如下步骤:
获取查询请求,解析出所述查询请求所采用的连接操作的操作方式以及对应的场景,其中所述操作方式包括全外连接、左外连接、右外连接以及内连接;
结合所述操作方式以及所述场景,将汇总和/或limit操作按照预设的策略下推,生成执行计划;
按照所述执行计划在数据库中执行相应操作,输出查询结果。
第四方面,提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时,实现如下步骤:
获取查询请求,解析出所述查询请求所采用的连接操作的操作方式以及对应的场景,其中所述操作方式包括全外连接、左外连接、右外连接以及内连接;
结合所述操作方式以及所述场景,将汇总和/或limit操作按照预设的策略下推,生成执行计划;
按照所述执行计划在数据库中执行相应操作,输出查询结果。
本发明实施例提供的技术方案带来的有益效果是:
本发明实施例提供的执行计划的优化方法、装置、计算机设备以及计算机可读存储介质,通过将汇总、limit等操作下推到olap数据库中,充分利用了olap(联机分析处理)数据库的优化特性,一方面,使得olap数据库的计算量明显减少,提升性能、并发性和资源利用率,另一方面,从olap数据库中返回到SQL引擎的数据量明显减少,减少了网络传输压力,且使得spark等SQL引擎的性能、并发性和资源里有了显著提高;避免了在高基数汇总时存在的限制以及spark SQL、presto等SQL引擎在进行大数据量多表join时的性能问题;且对于一些基数非常高的汇总查询,因为要返回全量数据,olap数据库可能无法及时处理,但是通过本方案,则可以在规定的响应时间内能够查询出数据。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是根据一示例性实施例示出的执行计划的优化方法的流程图;
图2是根据一示例性实施例示出的未优化的执行计划的流程图;
图3是根据一示例性实施例示出的当操作方式为全外连接或联合,场景为对汇总值不进行排序时,优化后的执行计划的流程图;
图4是根据一示例性实施例示出的当操作方式为全外连接或联合,场景为对汇总值进行排序时,优化后的执行计划的流程图;
图5是根据一示例性实施例示出的执行计划的优化装置的结构示意图;
图6是根据一示例性实施例示出的计算机设备的内部结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例主要分析olap数据库中多表之间的join(连接)和union(联合)操作,利用了druid、pinot、clickhouse等olap数据库的优势,在进行多表关联或union操作时,根据不同的场景,采用不同的方式,尽量将过滤、汇总、limit等操作下推到olap数据库中,使得从数据库中返回比较少的数据,从而提升性能,减少资源消耗。这里需要说明的是,本发明实施例中,汇总下推以及limit下推,就是将SQL语句中汇总操作以及limit限制等直接下推到olap数据库中,在olap数据库中直接进行汇总或limit操作,并且按照排序规则输出限定行数的结果集。本发明实施例提供的执行计划的优化方法并不局限于OLAP数据库,同样可以用于传统数据库的汇总处理上。
图1是根据一示例性实施例示出的执行计划的优化方法的流程图,参照图1所示,该方法包括如下步骤:
获取查询请求,解析出所述查询请求所采用的连接操作的操作方式以及对应的场景,其中所述操作方式包括全外连接、联合、左外连接、右外连接以及内连接。
具体的,多表之间的操作方式有很多种,如join(连接)和union(联合),其中join(连接)又分为全外连接、左外连接、右外连接以及内连接。多表操作时的场景也分为多种,本发明实施例中,主要考虑以下几种场景:
1、对汇总值不进行排序;
2、对维度进行排序(例如计算本月的销售额时,维度可以包括大区、品牌、商品组等);
3、对汇总值进行排序,包括对本期汇总值进行排序和对同期汇总值进行排序;
4、对同比值进行排序。
本发明实施例中,对limit等操作进行下推时,需具体考虑多表之间的操作方式以及具体场景,因而,需要解析出获取的查询请求所采用的操作方式以及对应的场景。
结合所述操作方式以及所述场景,将汇总和/或limit操作按照预设的策略下推,生成执行计划。
具体的,本发明实施例中,针对多表之间采用的不同操作方式以及对应的场景,预先设置相应的策略。解析出查询请求所采用的操作方式以及对应的场景后,将汇总和/或limit操作按照预设的策略下推,生成执行计划。
按照所述执行计划在数据库中执行相应操作,输出查询结果。
作为一种较优的实施方式,本发明实施例中,当所述操作方式为全外连接或联合,所述场景为对汇总值不进行排序时,所述将汇总和/或limit操作按照预设的策略下推,生成执行计划包括:
对同期结果集以及本期结果集按照分析维度的组合进行排序后,将所述limit操作下推到数据库中。
具体的,全外连接(Full outer join)在匹配两个表时,不需要两个表之间的数据能够匹配上,即返回两个表数据的合集。联合(union)操作和全外连接(Full outer join)的语义相同。这种SQL一般用在同环比操作,例如计算本月的销售额,并且和去年同期的销售额进行比较,同时需要按照不同的维度组合进行汇总,例如大区、品牌、商品组等。SQL语句一般可以写为:
Figure BDA0002073838440000101
在未使用本发明提供的执行计划优化方法前,通常这类执行计划首先在olap数据库中汇总计算出本期和同期值,然后再将本期和同期的所有数据都返回到SQL引擎,由SQL引擎对数据再次进行汇总。如果查询语句中有过滤条件,会将过滤条件下推到olap数据库中。详细未优化的执行计划参照图2来表示(假设每个表返回的汇总数据量有100万条)。这里需要说明的是,图2中的操作方式联合(Union)以及Druid只是一种示例性说明,本执行计划并不局限于联合(Union)操作方式以及Druid数据库。
当操作方式为全外连接或联合,场景为对汇总值不进行排序时,在该场景下,如果直接将limit下推到数据库中,则可能会出现结果错误的情况。因为汇总结果不进行排序,返回的结果就具有不确定性,可能本期结果和同期结果都有某个相同的维度值,但是在下推过程中本期返回该维度值,而同期汇总结果没有返回该维度值,这样就会导致计算错误。
在本发明实施例中,对同期和本期两个结果集按照分析维度的组合进行排序,例如在上述示例中对于大区、品牌进行排序,然后再将limit操作下推到数据库中。由于两个表(指同期和本期结果集)的排序字段相同,因此从每个表中返回的汇总结果集也都是有序和确定的,可以匹配的数据一定可以匹配上,因此最终结果也是正确的。虽然SQL语句没有要求排序,但是对结果集进行排序也是能满足要求的。对于这类场景加上排序完全符合SQL语义。
全外连接(Full outer join)会返回两个表的合集,因此只需要按照SQL语句中的limit条数进行下推即可。如果两个结果集完全匹配,则最终结果也是limit限制的条数。如果两个结果集有些数据不匹配,则最终结果记录数会大于limit限制,还需要对结果再进行一次limit。优化后的执行计划参照图3所示。这里需要说明的是,图3中的操作方式联合(Union)以及Druid只是一种示例性说明,本优化后的执行计划并不局限于联合(Union)操作方式以及Druid数据库。
进一步参照图3所示,假设每个结果的汇总结果集都是100万。对比未优化的执行计划,可以看出优化后的执行计划有着巨大的性能提升。未进行优化时,olap数据库中进行高基数的计算和返回时性能很差,有时甚至无法完成计算。但是进行limit下推,对执行计划进行优化后,性能会有很大提升。而且对于这类limit,olap数据库本身实现时也有很多优化,并且在持续进行中。每个结果集都返回100万条记录到SQL引擎中,如果是进行join计算,可能就需要采用sort merge算法,计算复杂度和资源消耗量都急剧上升,而性能却急速下降。但是如果两个结果集都是100条,则可以使用map join算法。两个算法的性能和成本有着天壤之别,mapjoin的成本更低且性能更好。
作为一种较优的实施方式,本发明实施例中,当所述操作方式为全外连接或联合,所述场景为对维度进行排序时,所述将汇总和/或limit操作按照预设的策略下推,生成执行计划包括:
检验排序字段与分析维度是否一致,若不一致,则将所述排序字段设置为与所述分析维度一致,对所述维度重新进行排序后,将所述limit操作下推到数据库中。
具体的,该场景与对汇总值不进行排序的场景类似,但是需要注意的是要将排序的维度(即排序字段)补全。因此需要先检验对维度进行排序的排序字段与分析维度(即汇总分组的维度)是否一致,若不一致,则将排序字段设置为与分析维度一致,对维度重新进行排序后,将limit操作下推到数据库中。例如,如果汇总分组是按照大区、品牌,而只对大区排序,则需要将品牌作为排序字段加入到大区后面,即将order by大区补充为order by大区、品牌,否则也有可能出现结果不对的情况。
作为一种较优的实施方式,本发明实施例中,当所述操作方式为全外连接或联合,所述场景为对汇总值进行排序时,所述将汇总和/或limit操作按照预设的策略下推,生成执行计划包括:
对汇总值进行排序的结果集进行汇总计算后,将所述汇总和所述limit操作均下推到数据库中,获取返回的第一结果集;
将所述第一结果集中的维度值作为过滤条件传给其余结果集,获取返回的第二结果集;
将所述第二结果集与所述第一结果集进行匹配,将匹配成功的结果补充至所述第一结果集中,生成最终的结果集。
具体的,对汇总值进行排序包括对本期汇总值进行排序或对同期汇总值进行排序。因而,对于汇总值进行排序,汇总值总是要落到某一个表中,也就是对于汇总值所在的结果集进行了限制,这个结果集是固定不变的,其余结果集是需要匹配这个汇总值进行了排序的结果集。因此,本发明实施例中,先对汇总值排序的表进行汇总计算,将汇总和limit操作都下推到数据库中,获取返回的第一结果集。然后将返回的第一结果集中的维度值作为过滤条件传到其余结果集,获取返回的第二结果集。因为druid之类的olap数据库是对所有维度都进行了索引,因此对于过滤特别高效,一般情况下在毫秒级就可以返回汇总结果(即第二结果集)。将返回的第二结果集和上一个结果集(即第一结果集)进行匹配,将匹配成功的结果值补充到前一个结果集中(即第一结果集),生成最终的结果集。优化后的执行计划参照图4所示。这里需要说明的是,图4中的操作方式联合(Union)以及Druid只是一种示例性说明,本优化后的执行计划并不局限于联合(Union)操作方式以及Druid数据库。
这里需要说明的是,当所述操作方式为全外连接或联合,所述场景为对同比值进行排序时,此时,由于需要对两个结果集的汇总值进行除法运算,只有等到所有运算结果都出来以后,才能知道最终排序结果。所以此种场景下,无法进行limit下推,需要从olap数据库中返回全量计算结果。
作为一种较优的实施方式,本发明实施例中,当所述操作方式为左外连接,所述场景为对汇总值不进行排序或对维度进行排序或对左表中的汇总值进行排序时,所述将汇总和/或limit操作按照预设的策略下推,生成执行计划包括:
将所述汇总操作、所述limit操作以及过滤操作直接下推到左表中,获取左表返回的结果集;
将所述左表返回的结果集中的维度值作为过滤条件,传到右表中,将右表的汇总结果与所述左表返回的结果集进行匹配,生成最终的结果集。
具体的,左外连接以左表为主,要求返回左表中的所有数据。如果右表中记录可以和左表匹配,则将结果集中的值设置为右表中的值,否则设为null值。
因此,当操作方式为左外连接,场景为对汇总值不进行排序或对维度进行排序或对左表中的汇总值进行排序时,将过滤、汇总和limit操作直接下推到左表中,获取左表返回的结果集,不需要对排序进行额外操作。即若原来不进行排序,则下推到左表中的操作也不需要排序。然后将左表返回的结果集中的维度值作为过滤条件,传到右表中,将右表的汇总结果再与左表返回的结果集进行匹配操作,生成最终的结果集。
作为一种较优的实施方式,本发明实施例中,当所述操作方式为左外连接,所述场景为对右表中的汇总值进行排序时,所述将汇总和/或limit操作按照预设的策略下推,生成执行计划包括:
设置下推参数以及放大比例;
根据所述下推参数判断是否满足下推的条件,若满足,则将所述limit操作中的limit值按照所述放大比例放大;
将放大后的所述limit操作与排序操作下推到右表中,获取右表返回的结果集;
将所述右表返回的结果集中的维度值作为过滤条件,传到左表中,将左表的汇总结果与所述右表返回的结果集进行匹配,生成最终的结果集。
具体的,由于左外连接(Left outer join)操作是以左表为主,右表中的查询结果有可能在左表中没有对应的记录,这样的结果是需要被废弃的。因此需要对limit结果放大后推入到右表中,例如,如果sql语句要求limit 100,那么对右表下推时需要将limit设置成500(这里并不限于500,可以根据具体需求进行设置)。然后将右表返回结果的维度值作为过滤条件传到左表中。将左表的结果集和右表的结果集进行匹配,将不匹配的右表结果集的结果过滤掉。
如果最终join返回的结果集条数小于limit指定的条数,则有两种处理方式:
1、将结果集返回
2、转入到常规处理,即不进行下推操作。将左表和右表的所有结果都返回,然后再进行匹配计算和排序计算。
具体的处理方式,可以根据实际的返回结果集的情况进行选择,这里不再赘述。
因为这类情况比较复杂,因此在实际工程实现时,可以做如下优化:
首先,设置下推参数,根据下推参数判断是否需要,只有当下推参数的参数值为true时才进行下推。其次设置放大比例,将下推到右表中的limit放大,例如放大比例为5,limit为100,则最终下推limit为500。除此之外,还可以对于维度基数值进行估算,当维度基数小于一定值时也不进行下推等。
这里需要说明的是,本发明实施例中,当所述操作方式为左外连接,所述场景为对同比值进行排序时,该种场景也无法进行执行计划的优化。
作为一种较优的实施方式,本发明实施例中,当所述操作方式为右外连接,所述场景为对汇总值不进行排序或对维度进行排序或对右表中的汇总值进行排序时,所述将汇总和/或limit操作按照预设的策略下推,生成执行计划包括:
将所述汇总操作、所述limit操作以及过滤操作直接下推到右表中,获取右表返回的结果集;
将所述右表返回的结果集中的维度值作为过滤条件,传到左表中,将左表的汇总结果与所述右表返回的结果集进行匹配,生成最终的结果集。
具体的,右外连接与左外连接类似,只是左表换成了右表,即以右表为主,要求返回右表中的所有数据。如果左表中记录可以和右表匹配,则将结果集中的值设置为左表中的值,否则设为null值。
因此,当操作方式为右外连接,场景为对汇总值不进行排序或对维度进行排序或对右表中的汇总值进行排序时,将过滤、汇总和limit操作直接下推到右表中,获取右表返回的结果集,不需要对排序进行额外操作。即若原来不进行排序,则下推到右表中的操作也不需要排序。然后将右表返回的结果集中的维度值作为过滤条件,传到左表中,将左表的汇总结果再与右表返回的结果集进行匹配操作,生成最终的结果集。
作为一种较优的实施方式,本发明实施例中,当所述操作方式为右外连接,所述场景为对左表中的汇总值进行排序时,所述将汇总和/或limit操作按照预设的策略下推,生成执行计划包括:
根据下推参数判断是否满足下推的条件,若满足,则将所述limit操作中的limit值按照预设的放大比例放大;
将放大后的所述limit操作与排序操作下推到左表中,获取左表返回的结果集;
将所述左表返回的结果集中的维度值作为过滤条件,传到右表中,将右表的汇总结果与所述左表返回的结果集进行匹配,生成最终的结果集。
具体的,同样的,由于右外连接(Right outer join)操作是以右表为主,左表中的查询结果有可能在右表中没有对应的记录,这样的结果是需要被废弃的。因此同样需要对limit结果放大后推入左表中,然后将左表返回结果的维度值作为过滤条件传到右表中。将左表的结果集和右表的结果集进行匹配,将不匹配的左表结果集的结果过滤掉。
同样的,如果最终join返回的结果集条数小于limit指定的条数,则有两种处理方式:
1、将结果集返回
2、转入到常规处理,即不进行下推操作。将左表和右表的所有结果都返回,然后再进行匹配计算和排序计算。
在实际工程实现时,同样可以做如下优化:
首先,设置下推参数,根据下推参数判断是否需要,只有当下推参数的参数值为true时才进行下推。其次设置放大比例,将下推到左表中的limit放大,例如放大比例为5,limit为100,则最终下推limit为500。除此之外,还可以对于维度基数值进行估算,当维度基数小于一定值时也不进行下推等。
这里需要说明的是,当所述操作方式为右外连接,所述场景为对同比值进行排序时,同样无法优化执行计划。
作为一种较优的实施方式,本发明实施例中,当所述操作方式为内连接,所述场景为对汇总值不进行排序或对维度进行排序时,所述将汇总和/或limit操作按照预设的策略下推,生成执行计划包括:
将排序字段设置为与分析维度一致,对左表和右表的结果集进行排序,并则将所述limit操作中的limit值按照预设的放大比例放大,将放大后的所述limit操作下推到数据库中。
具体的,内连接(Inner join)要求左表和右表中的关联字段匹配才会返回。因为是需要左表和右表完全匹配才算是成功,因此需要左右列表的汇总结果集是有序和确定的,因此,当操作方式为内连接,场景为对汇总值不进行排序或对维度进行排序时,需要在对左表和右表limit操作下推时对结果集进行排序,排序字段要和分析维度一致。除此之外,在进行limit下推时需要对limit值放大。具体操作时,可以先预先设置放大比例,然后将limit值按照预设的放大比例放大,再将放大后的limit操作下推到数据库中。
作为一种较优的实施方式,本发明实施例中,当所述操作方式为内连接,所述场景为对汇总值进行排序时,所述将汇总和/或limit操作按照预设的策略下推,生成执行计划包括:
将所述limit操作中的limit值按照预设的放大比例放大,将放大后的所述limit操作下推到对汇总值进行排序的表中,获取返回的第三结果集;
将所述第三结果集中的维度值作为过滤条件传至另一个表中进行过滤汇总,获取返回的第四结果集;
将所述第三结果集与所述第四结果集进行匹配,返回匹配成功的结果集。
具体的,对汇总值进行排序包括对本期汇总值进行排序或对同期汇总值进行排序。由于不管是对左表中的汇总值进行排序还是对右表中的汇总值进行排序,都需要将limit值放大,然后对对应表(即对汇总值进行排序的表)进行limit下推汇总,将返回结果集(即第三结果集)中的维度值作为过滤条件传到另外一个表中进行过滤汇总,获取返回的第四结果集。将两个结果集(即第三结果集和第四结果集)进行匹配,返回匹配成功的结果集。
图5是根据一示例性实施例示出的执行计划的优化装置的结构示意图,参照图5所示,该装置包括:
数据解析模块,用于获取查询请求,解析出所述查询请求所采用的操作方式以及对应的场景,其中所述操作方式包括全外连接、联合、左外连接、右外连接以及内连接;
计划生成模块,用于结合所述操作方式以及所述场景,将汇总和/或limit操作按照预设的策略下推,生成执行计划;
操作执行模块,用于按照所述执行计划在数据库中执行相应操作,输出查询结果。
作为一种较优的实施方式,本发明实施例中,所述计划生成模块包括:
数据排序单元,用于对同期结果集以及本期结果集按照分析维度的组合进行排序后;
操作下推单元,用于将所述limit操作下推到数据库中。
作为一种较优的实施方式,本发明实施例中,所述计划生成模块还包括:
检验单元,用于检验排序字段与分析维度是否一致;
维度设置单元,用于将所述排序字段设置为与所述分析维度一致;
所述排序单元还用于对所述维度重新进行排序。
作为一种较优的实施方式,本发明实施例中,所述计划生成模块还包括:
汇总计算单元,用于对汇总值进行排序的结果集进行汇总计算后;
所述操作下推单元还用于将所述汇总和所述limit操作均下推到数据库中,获取返回的第一结果集;
条件传送单元,用于将所述第一结果集中的维度值作为过滤条件传给其余结果集,获取返回的第二结果集;
结果匹配单元,用于将所述第二结果集与所述第一结果集进行匹配,将匹配成功的结果补充至所述第一结果集中,生成最终的结果集。
作为一种较优的实施方式,本发明实施例中,所述操作下推单元还用于将所述汇总操作、所述limit操作以及过滤操作直接下推到左表中,获取左表返回的结果集;
所述条件传送单元还用于将所述左表返回的结果集中的维度值作为过滤条件,传到右表中;
所述结果匹配单元还用于将右表的汇总结果与所述左表返回的结果集进行匹配,生成最终的结果集。
作为一种较优的实施方式,本发明实施例中,所述计划生成模块还包括:
参数设置单元,用于设置下推参数以及放大比例;
判断单元,用于根据所述下推参数判断是否满足下推的条件;
放大单元,用于将所述limit操作中的limit值按照所述放大比例放大;
所述操作下推单元还用于将放大后的所述limit操作与排序操作下推到右表中,获取右表返回的结果集;
所述条件传送单元还用于将所述右表返回的结果集中的维度值作为过滤条件,传到左表中;
所述结果匹配单元还用于将左表的汇总结果与所述右表返回的结果集进行匹配,生成最终的结果集。
作为一种较优的实施方式,本发明实施例中,所述操作下推单元还用于将所述汇总操作、所述limit操作以及过滤操作直接下推到右表中,获取右表返回的结果集。
作为一种较优的实施方式,本发明实施例中,所述操作下推单元还用于将放大后的所述limit操作与排序操作下推到左表中,获取左表返回的结果集。
作为一种较优的实施方式,本发明实施例中,所述数据排序单元还用于对左表和右表的结果集进行排序。
作为一种较优的实施方式,本发明实施例中,所述操作下推单元还用于将放大后的所述limit操作下推到对汇总值进行排序的表中,获取返回的第三结果集;
所述条件传送单元还用于将所述第三结果集中的维度值作为过滤条件传至另一个表中进行过滤汇总,获取返回的第四结果集;
所述结果匹配单元还用于将所述第三结果集与所述第四结果集进行匹配,返回匹配成功的结果集。
图6是根据一示例性实施例示出的计算机设备的内部结构示意图,参照图6所示,该计算机设备包括通过系统总线连接的处理器、存储器和网络接口。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种执行计划的优化方法。
本领域技术人员可以理解,图6中示出的结构,仅仅是与本发明方案相关的部分结构的框图,并不构成对本发明方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
作为一种较优的实施方式,本发明实施例中,计算机设备包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现以下步骤:
获取查询请求,解析出所述查询请求所采用的连接操作的操作方式以及对应的场景,其中所述操作方式包括全外连接、左外连接、右外连接以及内连接;
结合所述操作方式以及所述场景,将汇总和/或limit操作按照预设的策略下推,生成执行计划;
按照所述执行计划在数据库中执行相应操作,输出查询结果。
作为一种较优的实施方式,本发明实施例中,当所述操作方式为全外连接或联合,所述场景为对汇总值不进行排序时,在处理器执行计算机程序实现上述的将汇总和/或limit操作按照预设的策略下推,生成执行计划的步骤时,具体实现以下步骤:
对同期结果集以及本期结果集按照分析维度的组合进行排序后,将所述limit操作下推到数据库中。
作为一种较优的实施方式,本发明实施例中,当所述操作方式为全外连接或联合,所述场景为对维度进行排序时,在处理器执行计算机程序实现上述的将汇总和/或limit操作按照预设的策略下推,生成执行计划的步骤时,具体实现以下步骤:
检验排序字段与分析维度是否一致,若不一致,则将所述排序字段设置为与所述分析维度一致,对所述维度重新进行排序后,将所述limit操作下推到数据库中。
作为一种较优的实施方式,本发明实施例中,当所述操作方式为全外连接或联合,所述场景为对汇总值进行排序时,在处理器执行计算机程序实现上述的将汇总和/或limit操作按照预设的策略下推,生成执行计划的步骤时,具体实现以下步骤:
对汇总值进行排序的结果集进行汇总计算后,将所述汇总和所述limit操作均下推到数据库中,获取返回的第一结果集;
将所述第一结果集中的维度值作为过滤条件传给其余结果集,获取返回的第二结果集;
将所述第二结果集与所述第一结果集进行匹配,将匹配成功的结果补充至所述第一结果集中,生成最终的结果集。
作为一种较优的实施方式,本发明实施例中,当所述操作方式为左外连接,所述场景为对汇总值不进行排序或对维度进行排序或对左表中的汇总值进行排序时,在处理器执行计算机程序实现上述的将汇总和/或limit操作按照预设的策略下推,生成执行计划的步骤时,具体实现以下步骤:
将所述汇总操作、所述limit操作以及过滤操作直接下推到左表中,获取左表返回的结果集;
将所述左表返回的结果集中的维度值作为过滤条件,传到右表中,将右表的汇总结果与所述左表返回的结果集进行匹配,生成最终的结果集。
作为一种较优的实施方式,本发明实施例中,当所述操作方式为左外连接,所述场景为对右表中的汇总值进行排序时,在处理器执行计算机程序实现上述的将汇总和/或limit操作按照预设的策略下推,生成执行计划的步骤时,具体实现以下步骤:
设置下推参数以及放大比例;
根据所述下推参数判断是否满足下推的条件,若满足,则将所述limit操作中的limit值按照所述放大比例放大;
将放大后的所述limit操作与排序操作下推到右表中,获取右表返回的结果集;
将所述右表返回的结果集中的维度值作为过滤条件,传到左表中,将左表的汇总结果与所述右表返回的结果集进行匹配,生成最终的结果集。
作为一种较优的实施方式,本发明实施例中,当所述操作方式为右外连接,所述场景为对汇总值不进行排序或对维度进行排序或对右表中的汇总值进行排序时,在处理器执行计算机程序实现上述的将汇总和/或limit操作按照预设的策略下推,生成执行计划的步骤时,具体实现以下步骤:
将所述汇总操作、所述limit操作以及过滤操作直接下推到右表中,获取右表返回的结果集;
将所述右表返回的结果集中的维度值作为过滤条件,传到左表中,将左表的汇总结果与所述右表返回的结果集进行匹配,生成最终的结果集。
作为一种较优的实施方式,本发明实施例中,当所述操作方式为右外连接,所述场景为对左表中的汇总值进行排序时,在处理器执行计算机程序实现上述的将汇总和/或limit操作按照预设的策略下推,生成执行计划的步骤时,具体实现以下步骤:
根据下推参数判断是否满足下推的条件,若满足,则将所述limit操作中的limit值按照预设的放大比例放大;
将放大后的所述limit操作与排序操作下推到左表中,获取左表返回的结果集;
将所述左表返回的结果集中的维度值作为过滤条件,传到右表中,将右表的汇总结果与所述左表返回的结果集进行匹配,生成最终的结果集。
作为一种较优的实施方式,本发明实施例中,当所述操作方式为内连接,所述场景为对汇总值不进行排序或对维度进行排序时,在处理器执行计算机程序实现上述的将汇总和/或limit操作按照预设的策略下推,生成执行计划的步骤时,具体实现以下步骤:
将排序字段设置为与分析维度一致,对左表和右表的结果集进行排序,并则将所述limit操作中的limit值按照预设的放大比例放大,将所述放大后的limit操作下推到数据库中。
作为一种较优的实施方式,本发明实施例中,当所述操作方式为内连接,所述场景为对汇总值进行排序时,在处理器执行计算机程序实现上述的将汇总和/或limit操作按照预设的策略下推,生成执行计划的步骤时,具体实现以下步骤:
将所述limit操作中的limit值按照预设的放大比例放大,将所述放大后的limit操作下推到对汇总值进行排序的表中,获取返回的第三结果集;
将所述第三结果集中的维度值作为过滤条件传至另一个表中进行过滤汇总,获取返回的第四结果集;
将所述第三结果集与所述第四结果集进行匹配,返回匹配成功的结果集。
本发明实施例中,还提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时,实现如下步骤:
获取查询请求,解析出所述查询请求所采用的连接操作的操作方式以及对应的场景,其中所述操作方式包括全外连接、左外连接、右外连接以及内连接;
结合所述操作方式以及所述场景,将汇总和/或limit操作按照预设的策略下推,生成执行计划;
按照所述执行计划在数据库中执行相应操作,输出查询结果。
作为一种较优的实施方式,本发明实施例中,当所述操作方式为全外连接或联合,所述场景为对汇总值不进行排序时,在计算机程序被处理器执行实现上述的将汇总和/或limit操作按照预设的策略下推,生成执行计划的步骤时,具体实现以下步骤:
对同期结果集以及本期结果集按照分析维度的组合进行排序后,将所述limit操作下推到数据库中。
作为一种较优的实施方式,本发明实施例中,当所述操作方式为全外连接或联合,所述场景为对维度进行排序时,在计算机程序被处理器执行实现上述的将汇总和/或limit操作按照预设的策略下推,生成执行计划的步骤时,具体实现以下步骤:
检验排序字段与分析维度是否一致,若不一致,则将所述排序字段设置为与所述分析维度一致,对所述维度重新进行排序后,将所述limit操作下推到数据库中。
作为一种较优的实施方式,本发明实施例中,当所述操作方式为全外连接或联合,所述场景为对汇总值进行排序时,在计算机程序被处理器执行实现上述的将汇总和/或limit操作按照预设的策略下推,生成执行计划的步骤时,具体实现以下步骤:
对汇总值进行排序的结果集进行汇总计算后,将所述汇总和所述limit操作均下推到数据库中,获取返回的第一结果集;
将所述第一结果集中的维度值作为过滤条件传给其余结果集,获取返回的第二结果集;
将所述第二结果集与所述第一结果集进行匹配,将匹配成功的结果补充至所述第一结果集中,生成最终的结果集。
作为一种较优的实施方式,本发明实施例中,当所述操作方式为左外连接,所述场景为对汇总值不进行排序或对维度进行排序或对左表中的汇总值进行排序时,在计算机程序被处理器执行实现上述的将汇总和/或limit操作按照预设的策略下推,生成执行计划的步骤时,具体实现以下步骤:
将所述汇总操作、所述limit操作以及过滤操作直接下推到左表中,获取左表返回的结果集;
将所述左表返回的结果集中的维度值作为过滤条件,传到右表中,将右表的汇总结果与所述左表返回的结果集进行匹配,生成最终的结果集。
作为一种较优的实施方式,本发明实施例中,当所述操作方式为左外连接,所述场景为对右表中的汇总值进行排序时,在计算机程序被处理器执行实现上述的将汇总和/或limit操作按照预设的策略下推,生成执行计划的步骤时,具体实现以下步骤:
设置下推参数以及放大比例;
根据所述下推参数判断是否满足下推的条件,若满足,则将所述limit操作中的limit值按照所述放大比例放大;
将所述放大后的limit操作与排序操作下推到右表中,获取右表返回的结果集;
将所述右表返回的结果集中的维度值作为过滤条件,传到左表中,将左表的汇总结果与所述右表返回的结果集进行匹配,生成最终的结果集。
作为一种较优的实施方式,本发明实施例中,当所述操作方式为右外连接,所述场景为对汇总值不进行排序或对维度进行排序或对右表中的汇总值进行排序时,在计算机程序被处理器执行实现上述的将汇总和/或limit操作按照预设的策略下推,生成执行计划的步骤时,具体实现以下步骤:
将所述汇总操作、所述limit操作以及过滤操作直接下推到右表中,获取右表返回的结果集;
将所述右表返回的结果集中的维度值作为过滤条件,传到左表中,将左表的汇总结果与所述右表返回的结果集进行匹配,生成最终的结果集。
作为一种较优的实施方式,本发明实施例中,当所述操作方式为右外连接,所述场景为对左表中的汇总值进行排序时,在计算机程序被处理器执行实现上述的将汇总和/或limit操作按照预设的策略下推,生成执行计划的步骤时,具体实现以下步骤:
根据下推参数判断是否满足下推的条件,若满足,则将所述limit操作中的limit值按照预设的放大比例放大;
将所述放大后的limit操作与排序操作下推到左表中,获取左表返回的结果集;
将所述左表返回的结果集中的维度值作为过滤条件,传到右表中,将右表的汇总结果与所述左表返回的结果集进行匹配,生成最终的结果集。
作为一种较优的实施方式,本发明实施例中,当所述操作方式为内连接,所述场景为对汇总值不进行排序或对维度进行排序时,在计算机程序被处理器执行实现上述的将汇总和/或limit操作按照预设的策略下推,生成执行计划的步骤时,具体实现以下步骤:
将排序字段设置为与分析维度一致,对左表和右表的结果集进行排序,并则将所述limit操作中的limit值按照预设的放大比例放大,将所述放大后的limit操作下推到数据库中。
作为一种较优的实施方式,本发明实施例中,当所述操作方式为内连接,所述场景为对汇总值进行排序时,在计算机程序被处理器执行实现上述的将汇总和/或limit操作按照预设的策略下推,生成执行计划的步骤时,具体实现以下步骤:
将所述limit操作中的limit值按照预设的放大比例放大,将所述放大后的limit操作下推到对汇总值进行排序的表中,获取返回的第三结果集;
将所述第三结果集中的维度值作为过滤条件传至另一个表中进行过滤汇总,获取返回的第四结果集;
将所述第三结果集与所述第四结果集进行匹配,返回匹配成功的结果集。
综上所述,本发明实施例提供的技术方案带来的有益效果是:
本发明实施例提供的执行计划的优化方法、装置、计算机设备以及计算机可读存储介质,通过将汇总、limit等操作下推到olap数据库中,充分利用了olap(联机分析处理)数据库的优化特性,一方面,使得olap数据库的计算量明显减少,提升性能、并发性和资源利用率,另一方面,从olap数据库中返回到SQL引擎的数据量明显减少,减少了网络传输压力,且使得spark等SQL引擎的性能、并发性和资源里有了显著提高;避免了在高基数汇总时存在的限制以及spark SQL、presto等SQL引擎在进行大数据量多表join时的性能问题;且对于一些基数非常高的汇总查询,因为要返回全量数据,olap数据库可能无法及时处理,但是通过本方案,则可以在规定的响应时间内能够查询出数据。
需要说明的是:上述实施例提供的执行计划的优化装置在触发优化业务时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的执行计划的优化装置与执行计划的优化方法实施例属于同一构思,即该装置是基于该执行计划的优化方法的,其具体实现过程详见方法实施例,这里不再赘述。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种非易失性计算机可读存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (12)

1.一种执行计划的优化方法,其特征在于,所述方法包括如下步骤:
获取查询请求,解析出所述查询请求所采用的操作方式以及对应的场景,其中所述操作方式包括全外连接、联合、左外连接、右外连接以及内连接;
结合所述操作方式以及所述场景,将汇总和/或limit操作按照预设的策略下推,生成执行计划;
当所述操作方式为全外连接或联合,所述场景为对汇总值不进行排序时,所述将汇总和/或limit操作按照预设的策略下推,生成执行计划包括:
对同期结果集以及本期结果集按照分析维度的组合进行排序后,将所述limit操作下推到数据库中;
按照所述执行计划在数据库中执行相应操作,输出查询结果。
2.根据权利要求1所述的执行计划的优化方法,其特征在于,当所述操作方式为全外连接或联合,所述场景为对维度进行排序时,所述将汇总和/或limit操作按照预设的策略下推,生成执行计划包括:
检验排序字段与分析维度是否一致,若不一致,则将所述排序字段设置为与所述分析维度一致,对所述维度重新进行排序后,将所述limit操作下推到数据库中。
3.根据权利要求1所述的执行计划的优化方法,其特征在于,当所述操作方式为全外连接或联合,所述场景为对汇总值进行排序时,所述将汇总和/或limit操作按照预设的策略下推,生成执行计划包括:
对汇总值进行排序的结果集进行汇总计算后,将所述汇总和所述limit操作均下推到数据库中,获取返回的第一结果集;
将所述第一结果集中的维度值作为过滤条件传给其余结果集,获取返回的第二结果集;
将所述第二结果集与所述第一结果集进行匹配,将匹配成功的结果补充至所述第一结果集中,生成最终的结果集。
4.根据权利要求1所述的执行计划的优化方法,其特征在于,当所述操作方式为左外连接,所述场景为对汇总值不进行排序或对维度进行排序或对左表中的汇总值进行排序时,所述将汇总和/或limit操作按照预设的策略下推,生成执行计划包括:
将所述汇总操作、所述limit操作以及过滤操作直接下推到左表中,获取左表返回的结果集;
将所述左表返回的结果集中的维度值作为过滤条件,传到右表中,将右表的汇总结果与所述左表返回的结果集进行匹配,生成最终的结果集。
5.根据权利要求1所述的执行计划的优化方法,其特征在于,当所述操作方式为左外连接,所述场景为对右表中的汇总值进行排序时,所述将汇总和/或limit操作按照预设的策略下推,生成执行计划包括:
设置下推参数以及放大比例;
根据所述下推参数判断是否满足下推的条件,若满足,则将所述limit操作中的limit值按照所述放大比例放大;
将放大后的所述limit操作与排序操作下推到右表中,获取右表返回的结果集;
将所述右表返回的结果集中的维度值作为过滤条件,传到左表中,将左表的汇总结果与所述右表返回的结果集进行匹配,生成最终的结果集。
6.根据权利要求1所述的执行计划的优化方法,其特征在于,当所述操作方式为右外连接,所述场景为对汇总值不进行排序或对维度进行排序或对右表中的汇总值进行排序时,所述将汇总和/或limit操作按照预设的策略下推,生成执行计划包括:
将所述汇总操作、所述limit操作以及过滤操作直接下推到右表中,获取右表返回的结果集;
将所述右表返回的结果集中的维度值作为过滤条件,传到左表中,将左表的汇总结果与所述右表返回的结果集进行匹配,生成最终的结果集。
7.根据权利要求1所述的执行计划的优化方法,其特征在于,当所述操作方式为右外连接,所述场景为对左表中的汇总值进行排序时,所述将汇总和/或limit操作按照预设的策略下推,生成执行计划包括:
根据下推参数判断是否满足下推的条件,若满足,则将所述limit操作中的limit值按照预设的放大比例放大;
将放大后的所述limit操作与排序操作下推到左表中,获取左表返回的结果集;
将所述左表返回的结果集中的维度值作为过滤条件,传到右表中,将右表的汇总结果与所述左表返回的结果集进行匹配,生成最终的结果集。
8.根据权利要求1所述的执行计划的优化方法,其特征在于,当所述操作方式为内连接,所述场景为对汇总值不进行排序或对维度进行排序时,所述将汇总和/或limit操作按照预设的策略下推,生成执行计划包括:
将排序字段设置为与分析维度一致,对左表和右表的结果集进行排序,并则将所述limit操作中的limit值按照预设的放大比例放大,将放大后的所述limit操作下推到数据库中。
9.根据权利要求1所述的执行计划的优化方法,其特征在于,当所述操作方式为内连接,所述场景为对汇总值进行排序时,所述将汇总和/或limit操作按照预设的策略下推,生成执行计划包括:
将所述limit操作中的limit值按照预设的放大比例放大,将放大后的所述limit操作下推到对汇总值进行排序的表中,获取返回的第三结果集;
将所述第三结果集中的维度值作为过滤条件传至另一个表中进行过滤汇总,获取返回的第四结果集;
将所述第三结果集与所述第四结果集进行匹配,返回匹配成功的结果集。
10.一种执行计划的优化装置,其特征在于,所述装置包括:
数据解析模块,用于获取查询请求,解析出所述查询请求所采用的操作方式以及对应的场景,其中所述操作方式包括全外连接、联合、左外连接、右外连接以及内连接;
计划生成模块,用于结合所述操作方式以及所述场景,将汇总和/或limit操作按照预设的策略下推,生成执行计划;
当所述操作方式为全外连接或联合,所述场景为对汇总值不进行排序时,所述将汇总和/或limit操作按照预设的策略下推,生成执行计划包括:
对同期结果集以及本期结果集按照分析维度的组合进行排序后,将所述limit操作下推到数据库中;
操作执行模块,用于按照所述执行计划在数据库中执行相应操作,输出查询结果。
11.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至9中任一项所述方法的步骤。
12.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至9中任一项所述的方法的步骤。
CN201910449873.3A 2019-05-27 2019-05-27 执行计划的优化方法、装置、计算机设备和存储介质 Active CN110297858B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910449873.3A CN110297858B (zh) 2019-05-27 2019-05-27 执行计划的优化方法、装置、计算机设备和存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910449873.3A CN110297858B (zh) 2019-05-27 2019-05-27 执行计划的优化方法、装置、计算机设备和存储介质

Publications (2)

Publication Number Publication Date
CN110297858A CN110297858A (zh) 2019-10-01
CN110297858B true CN110297858B (zh) 2021-11-09

Family

ID=68027181

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910449873.3A Active CN110297858B (zh) 2019-05-27 2019-05-27 执行计划的优化方法、装置、计算机设备和存储介质

Country Status (1)

Country Link
CN (1) CN110297858B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11449514B2 (en) 2019-12-27 2022-09-20 Interset Software LLC Approximate aggregation queries
CN112685444A (zh) * 2020-12-24 2021-04-20 江苏苏宁云计算有限公司 数据查询方法、装置、计算机设备和存储介质

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102436494A (zh) * 2011-11-11 2012-05-02 中国工商银行股份有限公司 基于实践检验的执行计划优化的装置及方法
CN106484868A (zh) * 2016-10-11 2017-03-08 华胜信泰信息产业发展有限公司 基于limit语义的数据排序方法和数据排序装置
CN107885865A (zh) * 2017-11-22 2018-04-06 星环信息科技(上海)有限公司 一种代价优化器与代价估计的方法及其设备
CN108376143A (zh) * 2018-01-11 2018-08-07 上海跬智信息技术有限公司 一种新型的olap预计算模型及生成预计算结果的方法
CN108763573A (zh) * 2018-06-06 2018-11-06 众安信息技术服务有限公司 一种基于机器学习的olap引擎路由方法及系统
CN109726191A (zh) * 2018-12-12 2019-05-07 中国联合网络通信集团有限公司 一种跨集群数据的处理方法和系统、存储介质

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7177855B2 (en) * 2001-06-20 2007-02-13 Oracle International Corporation Compile-time optimizations of queries with SQL spreadsheet
WO2018157145A1 (en) * 2017-02-27 2018-08-30 Timescale, Inc. Scalable database system for querying time-series data
US10789249B2 (en) * 2017-05-23 2020-09-29 Sap Se Optimal offset pushdown for multipart sorting

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102436494A (zh) * 2011-11-11 2012-05-02 中国工商银行股份有限公司 基于实践检验的执行计划优化的装置及方法
CN106484868A (zh) * 2016-10-11 2017-03-08 华胜信泰信息产业发展有限公司 基于limit语义的数据排序方法和数据排序装置
CN107885865A (zh) * 2017-11-22 2018-04-06 星环信息科技(上海)有限公司 一种代价优化器与代价估计的方法及其设备
CN108376143A (zh) * 2018-01-11 2018-08-07 上海跬智信息技术有限公司 一种新型的olap预计算模型及生成预计算结果的方法
CN108763573A (zh) * 2018-06-06 2018-11-06 众安信息技术服务有限公司 一种基于机器学习的olap引擎路由方法及系统
CN109726191A (zh) * 2018-12-12 2019-05-07 中国联合网络通信集团有限公司 一种跨集群数据的处理方法和系统、存储介质

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
Can Spark SQL push down a LIMIT operator on inner join;zero323;《https://stackoverflow.com/questions/48067064/can-spark-sql-push-down-a-limit-operator-on-inner-join》;20190112;1-3 *
Spark SQL Limit介绍及优化;牛肉圆粉不加葱;《https://www.jianshu.com/p/aa56b02cc82e》;20180826;1-11 *
SPARK SQL系统查询优化的研究与实现;丁凯泽;《中国优秀硕士学位论文全文数据库 信息科技辑》;20180315;I138-1209 *

Also Published As

Publication number Publication date
CN110297858A (zh) 2019-10-01

Similar Documents

Publication Publication Date Title
US11977545B2 (en) Generation of an optimized query plan in a database system
US9135301B2 (en) Pushdown of sorting and set operations (union, intersection, minus) to a large number of low-power cores in a heterogeneous system
US10133778B2 (en) Query optimization using join cardinality
CN109241093B (zh) 一种数据查询的方法、相关装置及数据库系统
US6029163A (en) Methods for collecting query workload based statistics on column groups identified by RDBMS optimizer
CN110096494B (zh) 使用源跟踪剖析数据
US8682875B2 (en) Database statistics for optimization of database queries containing user-defined functions
US8396852B2 (en) Evaluating execution plan changes after a wakeup threshold time
US20160350371A1 (en) Optimizer statistics and cost model for in-memory tables
US8150836B2 (en) System, method, and computer-readable medium for reducing row redistribution costs for parallel join operations
EP1302871A2 (en) Collecting statistics in a database system
CN111177148B (zh) 一种水电数据库自动建表分表的方法
US10726006B2 (en) Query optimization using propagated data distinctness
CN115964374B (zh) 一种基于预计算场景的查询处理方法及其装置
CN108280234B (zh) 数据查询方法及装置
CN104834754A (zh) 一种基于连接代价的sparql语义数据查询优化方法
US20140188924A1 (en) Techniques for ordering predicates in column partitioned databases for query optimization
CN110297858B (zh) 执行计划的优化方法、装置、计算机设备和存储介质
CN111125199B (zh) 一种数据库访问方法、装置及电子设备
CN115408384A (zh) 数据库访问方法、设备及存储介质
US11625399B2 (en) Methods and devices for dynamic filter pushdown for massive parallel processing databases on cloud
CN114969101B (zh) Sql语句的处理方法及装置
CN114490724B (zh) 处理数据库查询语句的方法和装置
CN116401277A (zh) 数据处理方法、装置、系统、设备及介质
CN114168620A (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
CP01 Change in the name or title of a patent holder

Address after: No.1-1 Suning Avenue, Xuzhuang Software Park, Xuanwu District, Nanjing, Jiangsu Province, 210000

Patentee after: Jiangsu Suning cloud computing Co.,Ltd.

Address before: No.1-1 Suning Avenue, Xuzhuang Software Park, Xuanwu District, Nanjing, Jiangsu Province, 210000

Patentee before: Suning Cloud Computing Co.,Ltd.

CP01 Change in the name or title of a patent holder
TR01 Transfer of patent right

Effective date of registration: 20240117

Address after: 210000, 1-5 story, Jinshan building, 8 Shanxi Road, Nanjing, Jiangsu.

Patentee after: SUNING.COM Co.,Ltd.

Address before: No.1-1 Suning Avenue, Xuzhuang Software Park, Xuanwu District, Nanjing, Jiangsu Province, 210000

Patentee before: Jiangsu Suning cloud computing Co.,Ltd.

TR01 Transfer of patent right