掌桥专利:专业的专利平台
掌桥专利
首页

相关子查询的优化方法、装置、设备和介质

文献发布时间:2024-05-31 01:29:11


相关子查询的优化方法、装置、设备和介质

技术领域

本申请涉及数据库领域,尤其涉及一种相关子查询的优化方法、装置、设备和介质。

背景技术

目前,数据库查询过程中,执行器每获取外表的一行元组,都需要执行一遍相关子查询,判断子查询的结果是否满足外表的约束条件,若满足,执行投影操作获取最终结果集。

因此,子查询的执行次数取决于外表的总元组数,若外表的数据规模很大,执行相关子查询需要花费很长时间,影响整体的查询性能。

发明内容

本申请提供一种相关子查询的优化方法、装置、设备和介质,用以减少查询次数,提高整体的查询性能。

第一方面,本申请提供一种相关子查询的优化方法,包括:

判断数据库中结构化查询语句是否包括相关子查询,若是,将外表的统计信息和内表的统计信息输入代价估算模型中;所述代价估算模型是基于外表的基准代价和内表的基准代价构建的;

根据所述代价估算模型的输出结果判断是否需要对所述内表进行分组聚合;

若是,对所述内表进行分组聚合后,将所述相关子查询修改为所述外表和所述内表内连接;若否,将所述相关子查询修改为所述外表和所述内表内连接。

可选的,所述判断数据库中结构化查询是否包括相关子查询,若是,将外表的统计信息和内表的统计信息输入代价估算模型中,包括:

判断数据库中结构化查询语句中的查询子句和/或连接子句是否包含子查询;

若是,判断所述子查询是相关子查询或非相关子查询;

若所述子查询是相关子查询,判断所述相关子查询是否为标量子查询;

若是,将外表的统计信息和内表的统计信息输入代价估算模型中。

可选的,所述判断所述相关子查询是否为标量子查询,包括:

检测所述相关子查询中的目标列,根据所述目标列中满足预设条件的行数判断所述相关子查询是否为标量子查询。

可选的,所述将外表的统计信息和内表的统计信息输入代价估算模型中,包括:

通过两阶段采样算法对所述数据库中结构化查询语句涉及的表进行数据采样,获得各表的统计信息;

从所述各表的统计信息中获取外表的统计信息和内表的统计信息,将所述外表的统计信息和内表的统计信息输入代价估算模型中。

可选的,所述从所述各表的统计信息中获取外表的统计信息和内表的统计信息,将所述外表的统计信息和内表的统计信息输入代价估算模型中,包括:

根据所述外表的基准代价和所述内表的基准代价构建代价估算模型;

将所述外表的统计信息中外表连接条件中的列的重复率和空值率,以及所述内表的统计信息中内表连接条件中的列的重复率和空值率输入所述代价估算模型中。

可选的,所述对所述内表进行分组聚合,包括:

对内表连接条件中的列进行分组,计算每一组的聚集函数;

投影所述内表连接条件中的列,以及所述聚集函数的结果。

第二方面,本申请提供一种相关子查询的优化装置,所述装置,包括:

第一判断模型,用于判断数据库中结构化查询语句是否包括相关子查询;

输入模块,用于在所述数据库中结构化查询语句包括相关子查询时,将外表的统计信息和内表的统计信息输入代价估算模型中;所述代价估算模型是基于外表的基准代价和内表的基准代价构建的;

第二判断模块,用于根据所述代价估算模型的输出结果判断是否需要对所述内表进行分组聚合;

优化模块,用于在需要对所述内表进行分组聚合时,对所述内表进行分组聚合后,将所述相关子查询修改为所述外表和所述内表内连接;以及不需要对所述内表进行分组聚合时,将所述相关子查询修改为所述外表和所述内表内连接。

可选的,所述第一判断模块具体用于,判断数据库中结构化查询语句中的查询子句和/或连接子句是否包含子查询;若是,判断所述子查询是相关子查询或非相关子查询;若所述子查询是相关子查询,判断所述相关子查询是否为标量子查询。

第三方面,本申请提供一种电子设备,包括:存储器和处理器;

存储器用于存储指令;处理器用于调用存储器中的指令执行第一方面及第一方面任一种可能的设计中的方法。

第四方面,本申请提供一种计算机可读存储介质,计算机可读存储介质中存储有计算机指令,当电子设备的至少一个处理器执行该计算机指令时,电子设备执行第一方面及第一方面任一种可能的设计中的方法。

第五方面,本申请提供一种计算机程序产品,所述计算机程序产品包括计算机指令,当电子设备的至少一个处理器执行该计算机指令时,电子设备执行第一方面及第一方面任一种可能的设计中的方法。

本申请提供的相关子查询的优化方法,判断数据库中结构化查询是否包括相关子查询,若是,将外表的统计信息和内表的统计信息输入代价估算模型中,代价估算模型基于外表的基准代价和内表的基准代价构建的,根据外表的统计信息和内表的统计信息输出的结果能够指示是否需要对内表进行优化,若代价估算模型输出的结果指示需要对内表进行优化,对内表进行分组聚合后将相关子查询修改为外表和内表内连接,若代价估算模型输出的结果指示无需对内表进行优化,直接将相关子查询修改为外表和内表内连接,从而减少查询次数,提升整体的查询性能。

附图说明

为了更清楚地说明本申请或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本申请一实施例提供的相关子查询的优化方法的流程图;

图2为本申请另一实施例提供的相关子查询的优化方法的流程图;

图3为本申请一实施例提供的相关子查询的优化装置的结构示意图;

图4为本申请一实施例提供的电子设备的硬件结构示意图。

具体实施方式

为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请中的附图,对本申请中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

目前,优化器(Optimizer)在处理如下结构化查询语句(SQL语句)时,

多数优化器生成的查询计划包括如下步骤:

1.对T1进行全表扫描,每获取一行元组后进行如下操作:

a.投影该行元组,获取该行元组id列的值Const;

b.将该行元组id列的值作为参数传给子查询的SQL语句,将子查询中的约束条件T1.id=T2.id替换为Const=T2.id;其中,T1为外表,T2为内表;

c.执行替换参数后的子查询语句,获取avg(T2.a)的值;

d.根据约束条件T1.a>avg(T2.a)过滤不满足条件的元组。

2.投影元组,解析T1的b列作为最终结果集。

在上述查询过程中,执行器每获取T1的一行元组,都需要执行一遍相关子查询,判断子查询的结果是否满足T1的约束条件,若满足,执行投影操作获取最终结果集。

综上,子查询的执行次数取决于T1的总元组数,若T1的数据规模很大,执行相关子查询需要花费很长时间,影响整体的查询性能。

因此,如何降低相关子查询的时间是较为重要的问题。

针对上述问题,本申请提出了一种相关子查询的优化方法,在数据库中的结构化查询语句符合优化条件时,将外表的统计信息和内表的统计信息输入代价估算模型中,并根据代价估算模型输出的结果判断是否需要对内表进行分组聚合,若需要,对内表进行分组聚合后将相关子查询改为外表和内表内连接,若不需要,直接将相关子查询改为外表和内表内连接,从而减少查询次数,提升整体的查询性能。

下面以具体地实施例对本申请的技术方案进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例不再赘述。

本申请中,以电子设备为执行主体,执行如下实施例的相关子查询的优化方法。具体地,该执行主体可以为电子设备的硬件装置,或者为电子设备中实现下述实施例的软件应用,或者为安装有实现下述实施例的软件应用的计算机可读存储介质,或者为实现下述实施例的软件应用的代码。

图1示出了本申请一实施例提供的一种相关子查询的优化方法的流程图。如图1所示,以电子设备为执行主体,本实施例的方法可以包括如下步骤:

S101、判断数据库中结构化查询语句是否包括相关子查询。

本申请实施例中,先遍历数据库中的结构化查询语句(SQL语句),对其进行分析和判断,以确定数据库中结构化查询语句是否符合优化条件。由于本申请是针对相关子查询进行优化,因此,本申请实施例中,先判断数据库中结构化查询语句是否包括相关子查询,若包括,符合优化条件,若不包括,不符合优化条件。

在一些实施例中,判断数据库中结构化查询语句中的查询子句(WHERE子句)和/或连接子句(ON子句)是否包括子查询(Sub-query);若查询子句和/或连接子句不包括子查询,不符合优化条件;若查询子句和/或连接子句包括子查询,判断子查询是相关子查询还是非相关子查询,例如可以根据子查询中的约束条件判断子查询是相关子查询还是非相关子查询。若子查询为非相关子查询,不符合优化条件,若子查询为相关子查询,判断相关子查询是否为标量子查询,若相关子查询为标量子查询,则符合优化条件,若相关子查询非标量子查询,则不符合优化条件。示例的,可以检测相关子查询中的目标列,根据目标列中满足预设条件的行数判断相关子查询是否为标量子查询,若满足预设条件的行数为一行,则相关子查询为标量子查询,若满足预设条件的行数为两行或以上,则相关子查询非标量子查询。

数据库中结构化查询语句符合优化条件,即包括相关子查询时,执行步骤S102。

S102、将外表的统计信息和内表的统计信息输入代价估算模型中,根据代价估算模型的输出结果判断是否需要对内表进行分组聚合。

本申请实施例中,通过代价估算模型判断是否需要对内表进行优化。需要说明,由于各表的数据量较大,若将所有数据输入代价估算模型,计算量较大,因此本申请实施例中基于统计信息(Statistics)判断是否需要优化,具体的,将外表的统计信息和内表的统计信息输入代价估算模型中。外表的统计信息可以包括从外表中筛选的部分行数据中第一目标列的重复率和空值率,第一目标列为外表连接条件中的列。内表的统计信息可以包括从内表中筛选的部分行数据中第二目标列的重复率和空值率,第二目标列为内表连接条件中的列。

代价估算是估算某个路径(可以是单表的路径,也可以是两个关系连接得到的路径,还可以是多个表根据不同的连接方式得到的连接路径)的花费,这些路径中每个节点主要的操作可以归纳为数据的读写及运行,这些操作所产生的开销主要为CPU开销及I/O开销。

因此,代价估算模型是基于外表的基准代价和内表的基准代价构建的。外表的基准代价可以包括从外表中获取各行元组产生的I/O开销,将外表中的各行元组与内表中的各行元组进行查询比较产生的CPU开销等;内表的基准代价可以包括从内表中获取各行元组产生的I/O开销等。由于CPU的并行数量也会影响代价估算模型,因此构建代价估算模型时可以设置硬件和并行参数影响因子,提高代价估算模型的准确性。

在将外表的统计信息中外表连接条件中的列的重复率和空值率,以及内表的统计信息中内表连接条件中的列的重复率和空值率输入代价估算模型之后,代价估算模型可以判断相关子查询的代价。例如,外表对应的空值率和重复率较高时,代价估算模型输出的代价较低,外表对应的空值率和重复率较低时,代价估算模型输出的代价较高;内表对应的空值率和重复率较高时,代价估算模型输出的代价较低,内表对应的空值率和重复率较低时,代价估算模型输出的代价较高。

因此,可以基于代价估算模型的输出结果判断是否需要对内表进行优化,即是否需要进行分组聚合,若需要对内表进行优化,执行步骤S103,若不需要对内表进行优化,执行步骤S104。例如,若代价估算模型输出的代价较低,例如低于预设值,可以判断需要对内表进行优化,若代价估算模型输出的代价较高,例如大于或等于预设值,可以判断不需要对内表进行优化。

S103、对内表进行分组聚合。

示例的,可以对内表连接条件中的列进行分组,计算每一组的聚集函数(Aggregate function),而后投影内表连接条件中的列,以及聚集函数的结果。

而后,执行步骤S104。

S104、将相关子查询修改为外表和内表内连接。

本实施例中,对相关子查询进行提升,消除相关子查询,将相关子查询修改为外表和内表内连接,提高查询效率和可读性。需要说明,子查询需要执行完整的子语句,然后将结果作为内存中的表进行连接操作;而表连接只需要执行一次查询,将两个表按照条件关联起来,比较快速、高效。

本申请提供的相关子查询的优化方法,在数据库中的结构化查询语句符合优化条件时,将外表的统计信息和内表的统计信息输入代价估算模型中,并根据代价估算模型输出的结果判断是否需要对内表进行分组聚合,若需要,对内表进行分组聚合后将相关子查询改为外表和内表内连接,若不需要,直接将相关子查询改为外表和内表内连接,从而减少查询次数,提升整体的查询性能。

图2示出了本申请一实施例提供的一种相关子查询的优化方法的流程图。如图2所示,以电子设备为执行主体,本实施例的方法可以包括如下步骤:

S201、判断数据库中结构化查询语句中的查询子句和/或连接子句是否包含子查询。

数据库中结构化查询语句中的查询子句包括子查询,或者,数据库中结构化查询语句中的连接子句包括子查询,或者,数据库中结构化查询语句中的查询子句和连接子句包括子查询时,执行步骤S202,若数据库中结构化查询语句中的查询子句和连接子句均不包括子查询时,不符合优化条件。

S202、判断子查询是相关子查询或非相关子查询。

子查询是相关子查询时,执行步骤S203,子查询是非相关子查询时,不符合优化条件。

S203、判断相关子查询是否为标量子查询。

检查相关子查询中的目标列,根据目标列返回的行数判断相关子查询是否为标量子查询,若是,执行步骤S204,若否,不符合优化条件。

S204、通过两阶段采算法对数据库中结构化查询语句涉及的表进行数据采样,获得各表的统计信息,从各表的统计信息中获取外表的统计信息和内表的统计信息。

S205、根据外表的基准代价和内表的基准代价构建代价估算模型。

S206、将外表的统计信息中外表连接条件中的列的重复率和空值率,以及内部版的统计信息中内表连接条件中的列的重复率和空值率输入代价估算模型中。

S207、根据代价估算模型的输出结果判断是否需要对内表进行优化。

若是,执行步骤S208,若否,执行步骤S209。

S208、对内表连接条件中的列进行分组,计算每一组的聚集函数,并投影内表连接条件中的列,以及聚集函数的结果。

而后,执行步骤S209。

S209、将相关子查询修改为外表和内表内连接。

应用本申请的方案后,在满足上述逻辑优化规则的场景下,性能得到了极大的提升,举例如下:

1万条数据的数据表T1、T2,查询语句如下:

在应用本申请的方案前,执行时间为:28534.788ms;应用本申请的方案后,执行时间缩短为:34.817ms。

本申请提供的相关子查询的优化方法,在数据库中的结构化查询语句包括相关子查询且相关子查询是标量子查询时,通过两阶段采样算法获取外表的统计信息和内表的统计信息,将外表的统计信息和内表的统计信息输入代价估算模型中,并根据代价估算模型输出的结果判断是否需要对内表进行分组聚合,若需要,对内表进行分组聚合后将相关子查询改为外表和内表内连接,若不需要,直接将相关子查询改为外表和内表内连接,从而减少查询次数,提升整体的查询性能。

图3示出了本申请一实施例提供的一种相关子查询的优化装置的结构示意图,如图3所示,本实施例的相关子查询的优化装置10用于实现上述任一方法实施例中对应于电子设备的操作,本实施例的相关子查询的优化装置10包括:

第一判断模型11,用于判断数据库中结构化查询语句是否包括相关子查询;

输入模块12,用于在数据库中结构化查询语句包括相关子查询时,将外表的统计信息和内表的统计信息输入代价估算模型中;代价估算模型是基于外表的基准代价和内表的基准代价构建的;

第二判断模块13,用于根据代价估算模型的输出结果判断是否需要对内表进行分组聚合;

优化模块14,用于在需要对内表进行分组聚合时,对内表进行分组聚合后,将相关子查询修改为外表和内表内连接;以及不需要对内表进行分组聚合时,将相关子查询修改为外表和内表内连接。

可选的,第一判断模块11具体用于,判断数据库中结构化查询语句中的查询子句和/或连接子句是否包含子查询;若是,判断子查询是相关子查询或非相关子查询;若子查询是相关子查询,判断相关子查询是否为标量子查询。

可选的,输入模块12具体用于,通过两阶段采样算法对数据库中结构化查询语句涉及的表进行数据采样,获得各表的统计信息;从各表的统计信息中获取外表的统计信息和内表的统计信息,将外表的统计信息和内表的统计信息输入代价估算模型中。

可选的,输入模块12具体用于,根据外表的基准代价和内表的基准代价构建代价估算模型;将外表的统计信息中外表连接条件中的列的重复率和空值率,以及内部版的统计信息中内表连接条件中的列的重复率和空值率输入代价估算模型中。

可选的,优化模块14具体用于,对内表连接条件中的列进行分组,计算每一组的聚集函数;投影内表连接条件中的列,以及聚集函数的结果。

本申请实施例提供的相关子查询的优化装置10,可执行上述方法实施例,其具体实现原理和技术效果,可参见上述方法实施例,本实施例此处不再赘述。

图4示出了本申请实施例提供的一种电子设备的硬件结构示意图。如图4所示,该电子设备20,用于实现上述任一方法实施例中对应于电子设备的操作,本实施例的电子设备20可以包括:存储器21,处理器22和通信接口23。

存储器21,用于存储计算机指令。该存储器21可能包含高速随机存取存储器(Random Access Memory,RAM),也可能还包括非易失性存储(Non-Volatile Memory,NVM),例如至少一个磁盘存储器,还可以为U盘、移动硬盘、只读存储器、磁盘或光盘等。

处理器22,用于执行存储器存储的计算机指令,以实现上述实施例中的方法。具体可以参见前述方法实施例中的相关描述。该处理器22可以是中央处理单元(CentralProcessing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital SignalProcessor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合发明所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。

可选地,存储器21既可以是独立的,也可以跟处理器22集成在一起。

通信接口23,可以与处理器22连接。处理器22可以控制通信接口23来实现信号的接收和发送的功能。

本实施例提供的电子设备可用于执行上述的方法,其实现方式和技术效果类似,本实施例此处不再赘述。

本申请还提供一种计算机可读存储介质,计算机可读存储介质中存储有计算机指令,计算机指令被处理器执行时用于实现上述的各种实施方式提供的方法。

本申请还提供一种计算机程序产品,该计算机程序产品包括计算机指令,该计算机指令存储在计算机可读存储介质中。设备的至少一个处理器可以从计算机可读存储介质中读取该计算机指令,至少一个处理器执行该计算机指令使得设备实施上述的各种实施方式提供的方法。

本申请实施例还提供一种芯片,该芯片包括存储器和处理器,所述存储器用于存储计算机指令,所述处理器用于从所述存储器中调用并运行所述计算机指令,使得安装有所述芯片的设备执行如上各种可能的实施方式中所述的方法。

最后应说明的是:以上各实施例仅用以说明本申请的技术方案,而非对其限制。尽管参照前述各实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换。而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。

相关技术
  • 模型训练方法、广告推荐方法、相关装置、设备及介质
  • 信息传输方法、装置、相关设备及计算机可读存储介质
  • 相关搜索词的确定方法、装置、存储介质及电子设备
  • 一种智能语音交互方法及装置、相关设备及存储介质
  • 控制信道处理方法、装置、系统、相关设备及存储介质
  • 一种非相关子查询的优化方法和装置
  • 一种非相关子查询的优化方法和装置
技术分类

06120116625506