CN110968594A - 数据库查询优化方法、引擎及存储介质 - Google Patents
数据库查询优化方法、引擎及存储介质 Download PDFInfo
- Publication number
- CN110968594A CN110968594A CN201811160796.1A CN201811160796A CN110968594A CN 110968594 A CN110968594 A CN 110968594A CN 201811160796 A CN201811160796 A CN 201811160796A CN 110968594 A CN110968594 A CN 110968594A
- Authority
- CN
- China
- Prior art keywords
- expression
- optimizer
- execution plan
- dynamically
- statistical information
- 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
Links
Images
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请实施例提供一种数据库查询优化方法、引擎及存储介质。在本申请实施例中,通过识别可动态优化的表达式,在运行时执行器调用优化器对可动态优化的表达式进行优化,利用优化器已有的优化技术实现了执行时动态优化表达式的目的,这不仅提升了执行时表达式优化的能力,而且基于优化器已有优化技术的动态优化耗时相对较少,避免了优化性能提升被动态优化耗时所抵消的问题,有利于进一步提高查询效率。
Description
技术领域
本申请涉及数据库技术领域,尤其涉及一种数据库查询优化方法、引擎及存储介质。
背景技术
数据库系统的总体性能在很大程度上取决于数据库的查询处理代价和效率。为了减少计算量,提高查询效率,在数据库查询过程中,解析器会先对查询语句进行词法分析语义分析形成查询树;查询树被送入优化器经过逻辑优化和物理优化,输出执行计划给执行器,执行器运行执行计划执行查表操作。
为了进一步减少计算量,提高查询效率,现有技术有提出使用即时编译技术,在运行执行计划时,通过第三方即时编译器重新优化执行计划或者中间表示(IntermediateRepresentation,IR),并生成最终可执行的表达式。这种方法的优化能力强,但会增加编译优化的执行时间。带来的问题是,执行时优化所带来的性能提升,可能会被编译优化的耗时所抵消。鉴于此,亟待提出一种新的优化方案。
发明内容
本申请的多个方面提供一种数据库查询优化方法、引擎及存储介质,用以在执行时动态优化表达式,进一步提高查询效率。
本申请实施例提供一种数据库查询优化方法,包括:运行优化器对数据库查询语句进行优化处理以得到至少一个逻辑执行计划,每个逻辑执行计划包括表达式;从所述至少一个逻辑执行计划中识别出包含可动态优化的表达式的目标逻辑执行计划;在运行时执行器调用所述优化器对所述可动态优化的表达式进行优化以得到表达式优化结果,并根据所述表达式优化结果获取查询结果。
可选地,在运行时执行器调用所述优化器对所述可动态优化的表达式进行优化以得到表达式优化结果,包括:针对所述目标逻辑执行计划生成中间执行计划并送入执行器,所述中间执行计划包括所述目标逻辑执行计划中可动态优化的表达式;运行所述执行器调用所述优化器对所述中间执行计划中可动态优化的表达式进行优化以得到表达式优化结果。
本申请实施例还提供一种数据库引擎,包括:存储器和处理器;存储器,用于存储计算机程序、优化器和执行器;处理器,用于执行所述计算机程序,以用于:运行所述优化器对数据库查询语句进行优化处理以得到至少一个逻辑执行计划,每个逻辑执行计划包括表达式;从所述至少一个逻辑执行计划中识别出包含可动态优化的表达式的目标逻辑执行计划;在运行时执行器调用所述优化器对所述可动态优化的表达式进行优化以得到表达式优化结果,并根据所述表达式优化结果获取查询结果。
可选地,所述处理器在得到表达式优化结果时,具体用于:针对所述目标逻辑执行计划生成中间执行计划并送入所述执行器;运行所述执行器调用所述优化器对所述中间执行计划中可动态优化的表达式进行优化以得到表达式优化结果;其中,所述中间执行计划包括所述目标逻辑执行计划中可动态优化的表达式。
本申请实施例还提供一种存储有计算机程序的计算机可读存储介质,当所述计算机程序被处理器执行时,致使所述处理器能够实现上述方法实施例中的步骤。
在本申请实施例中,通过识别可动态优化的表达式,在运行时执行器调用优化器对可动态优化的表达式进行优化,利用优化器已有的优化技术实现了执行时动态优化表达式的目的,这不仅提升了执行时表达式优化的能力,而且基于优化器已有优化技术的动态优化耗时相对较少,避免了优化性能提升被动态优化耗时所抵消的问题,有利于进一步提高查询效率。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1a为本申请示例性实施例提供的一种数据库访问系统的结构示意图;
图1b为本申请实施例提供的包含可动态优化的表达式的逻辑执行计划和不包含可动态优化的表达式的逻辑执行计划的示例;
图1c为本申请实施例提供的部分数据表中行组的示意图;
图2a为本申请示例性实施例提供的一种数据库查询优化方法的流程示意图;
图2b为图2a中步骤203的一种实现方式的流程示意图;
图3为本申请示例性实施例提供的一种数据库引擎的结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
针对现有执行时优化面临的尴尬境况,在本申请一些实施例中,通过识别可动态优化的表达式,在运行时执行器调用优化器对可动态优化的表达式进行优化,利用优化器已有的优化技术实现了执行时动态优化表达式的目的,这不仅提升了执行时表达式优化的能力,而且基于优化器已有优化技术的动态优化耗时相对较少,避免了优化性能提升被动态优化耗时所抵消的问题,有利于进一步提高查询效率。
以下结合附图,详细说明本申请各实施例提供的技术方案。
图1a为本申请示例性实施例提供的一种数据库访问系统的结构示意图。如图1a所示,该系统包括:客户端101、数据库引擎102以及数据库(Database)103。
数据库103是建立在计算机存储设备上,按照一定数据结构来组织、存储和管理数据的仓库。在本申请实施例中,并不限定承载数据库103的计算机存储设备的实现形式,也不限定数据库103的类型和其采用的数据结构。例如,从数据结构来看,数据库103可以是层次式数据库、网络式数据库或关系式数据库;从存储格式来看,数据库103可以是行式数据库,也可以是列式数据库;从数据库语言来看,数据库103可以是SQL数据库,也可以是Oracle数据库等。
数据库引擎102是用于存储、处理和保护数据的核心服务,其任务包括处理与数据库103相关的事务,例如设计并创建数据库103,保存数据库103所需的各种列表和文档等,针对数据库103提供日常管理支持以优化数据库103的性能,以及响应客户端101的访问请求对数据库103进行相关操作并向客户端101返回相关操作结果,从而实现数据库103中数据的查看、删除、修改、增加等。
其中,客户端101与数据库引擎102之间通信连接,该通信连接可以是有线或无线网络连接。可选地,客户端101可以与数据库引擎102处于同一局域网内,也可以处于不同局域网内。
另外,数据库引擎102与数据库103之间也建立通信连接,该通信连接可以是有线或无线网络连接。可选地,在部署实现上,数据库引擎102与数据库103可以部署在同一物理设备上实现,也可以部署在不同物理设备上实现。当数据库引擎102与数据库103部署在不同物理设备上实现时,两者可以部署同一局域网内,也可以部署在不同局域网内。
客户端101可以看作是数据库103面向用户提供的交互接口,允许用户通过该客户端101访问数据库103。当用户需要访问数据库103时,或者,客户端101有数据库访问需求时,客户端101可以向数据库引擎102发送数据库访问请求;数据库引擎102可以根据该数据库访问请求对数据库103进行相应操作。
在一种数据库查询场景中,客户端101可以向数据库引擎102发送数据库查询语句。根据数据库103支持的数据库语言的不同,数据库查询语句会有所不同,例如可以是SQL语句,也可以是Orcal语句。数据库引擎102主要根据数据库查询语句对数据库103进行查询操作,并向客户端101返回查询结果。
在本实施例中,数据库引擎102在根据数据库查询语句对数据库103进行查询的过程中,可以对数据库查询语句进行优化处理,这样可以减少计算量,提高查询效率。在本实施例中,对数据库查询语句的优化处理包括:普通优化过程和执行时的动态优化过程。普通优化过程是指在生成数据库查询语句对应的执行计划之前的优化过程,一般由数据库引擎102中的优化器1022完成;执行时的动态优化过程是指在执行计划运行过程中的相关优化过程,该过程可由数据库引擎102中的执行器1024和优化器1022配合完成。参见图1a,数据库引擎102包括优化器1022和执行器1024。优化器1022和执行器1024是数据库引擎102中的功能模块,在实现上,优化器1022和执行器1024可以是软件的程序模块,也可以是硬件的,例如基于FPGA或CPLD等实现。
本申请下述各实施例将结合数据库引擎102的实现结构,详细说明对数据库查询语句进行优化处理的过程。
在数据库查询语句到达数据库引擎102之后,首先,优化器1022负责对数据库查询语句进行优化处理以得到至少一个逻辑执行计划,每个逻辑执行计划包括表达式,例如A>1,B<10等。当然,每个逻辑执行计划还包括相应的算子,例如sum(求和算子),count(数量统计算子)等。值得说明的是,逻辑执行计划中的算子和表达式属于逻辑算子和逻辑表达式。优化器1022的这个优化过程属于普通优化过程。
之后,可以从至少一个逻辑执行计划中识别出包含可动态优化的表达式的逻辑执行计划(即表达式可动态优化的逻辑执行计划),其余逻辑执行计划属于表达式不可动态优化的逻辑执行计划。其中,表达式可动态优化是指表达式有可能在执行时进一步被优化。为了便于区分和描述,将表达式可动态优化的逻辑执行计划称为目标逻辑执行计划,并将表达式不可动态优化的逻辑执行计划称为非目标逻辑执行计划。
结合图1b所示两个逻辑执行计划的示例,逻辑执行计划a包括算子a和表达式a,表达式a不存在在执行时进一步被优化的可能性,故逻辑执行计划a属于非目标逻辑执行计划;逻辑执行计划b包括算子b和表达式b,表达式b有可能在执行时进一步被优化,故逻辑执行计划b属于目标逻辑执行计划。
结合图1b所示,对于非目标逻辑执行计划a,可以按照常规的处理方式,针对非目标逻辑执行计划a生成物理执行计划,该物理执行计划包括物理算子a’和执行表达式a’,将物理执行计划送入执行器1024,执行器1024运行该物理执行计划查询数据库103以获得查询结果,并返回给客户端101。
对于目标逻辑执行计划b,在运行时执行器1024可调用优化器1022对其中可动态优化的表达式进行优化以得到表达式优化结果。对优化器1022而言,当被执行器1024调用时,可利用已有的优化技术对可动态优化的表达式进行优化并向执行器1024输出表达式优化结果。当得到优化器1022输出的表达式优化结果时,执行器1024利用该表达式优化结果获取查询结果并返回给客户端101。
其中,在运行时执行器调用优化器对可动态优化的表达式进行优化,利用优化器已有的优化技术实现了执行时动态优化表达式的目的,这不仅提升了执行时表达式优化的能力,而且基于优化器已有优化技术的动态优化耗时相对较少,避免了优化性能提升被动态优化耗时所抵消的问题,有利于进一步提高查询效率。
在一种可选实施方式中,结合图1b所示,对于目标逻辑执行计划b,并不直接生成物理执行计划,而是生成中间执行计划,该中间执行计划包括物理算子b’和目标逻辑执行计划b中包含的可动态优化的表达式b,将该中间执行计划送入执行器1024。对执行器1024来说,在接收到执行计划时,可以根据执行计划中表达式的格式区分接收到的执行计划是物理执行计划还是中间执行计划。例如,对于中间执行计划中的表达式b仍是逻辑表达式的样子,执行器1024据此可以确定接收到的是需要动态优化的中间执行计划而不是物理执行计划,于是调用优化器1022,利用优化器1022对中间执行计划中可动态优化的表达式b进行优化并得到表达式优化结果。对优化器1022而言,当被执行器1024调用时,可利用已有的优化技术对可动态优化的表达式进行优化并向执行器1024输出表达式优化结果。当得到优化器1022输出的表达式优化结果时,执行器1024利用该表达式优化结果获取查询结果并返回给客户端101。
可选地,若对可动态优化的表达式b进行优化后,仍需生成执行用表达式,则可以根据表达式优化结果生成执行表达式b’,进而构成物理执行计划,如图1b所示。
在上述可选实施方式中,在得到数据库查询语句对应的至少一个逻辑执行计划后,并未直接生成物理执行计划,而是识别包含可动态优化的表达式的逻辑执行计划,针对包含可动态优化的表达式的逻辑执行计划生成中间执行计划并送入执行器,执行器调用优化器对中间执行计划中的表达式进行优化,利用优化器已有的优化技术实现执行时动态优化表达式的目的,这不仅提升了执行时表达式优化的能力,而且基于优化器已有优化技术的动态优化耗时相对较少,避免了优化性能提升被动态优化耗时所抵消的问题,有利于进一步提高查询效率。
另外,在本实施例中,执行器直接调用优化器,可以充分利用优化器中已有的优化技术,无需在优化器中实现同样的优化技术,避免了相同的优化技术在执行器和优化器中同时存在造成的代码管理压力,有利于减轻代码管理压力,而且也避免了执行表达式体系在执行阶段的割裂。
在本申请上述实施例或下述实施例中,可选地,如图1a所示,数据库引擎102还包括解析器1020。解析器1020在优化器1022之前,可以对数据库查询语句进行语法解析,将数据库查询语句解析成一颗语法树,然后将该语法树输入优化器1022。为了与优化器1022优化后的语法树进行区分,将解析器1020解析出的语法树称为原始语法树。可选地,解析器1020还可以对语法树进行语义解析。关于解析器1020对数据库查询语句进行语法和语义解析的详细过程可参见现有技术,在此不再赘述。
对优化器1022来说,可以对原始语法树进行优化处理可以得到优化后的语法树,该优化后的语法树包含至少一个逻辑执行计划。以数据库查询语句:SELECT COUNT(*)FROMT1WHER A>1为例,经过优化器1022优化之后可以得到三个逻辑算子:Project,Aggregation和table scan;逻辑算子table scan对应可动态优化的表达式A>1,逻辑算子Aggregation对应不可动态优化的表达式COUNT(*),逻辑算子Project对应不可动态优化的表达式读取COUNT(*)的结果。
其中,优化器1022在对原始语法树进行优化处理的过程中,可以结合数据库103中的统计信息。其中,统计信息是指数据库103中与表格、索引视图以及表格中的行或列等相关的可统计出的信息,例如可以是某一行中数据值的分布情况,数值分布是否均匀,最大值是多少,最小值是多少,表格包含的行数,某些数值的分布图等等均属于统计信息。
值得说明的是,根据数据库103采用的存储格式的不同,数据库103的统计信息也会有所不同。例如,若数据库103采用行式存储,则行是数据库103中的最小数据单位,统计信息可能是一些与行相关的信息,例如某行的最大值是10、最小值是0,某张表包含1000行等。又例如,若数据库103采用列式存储,则列是数据库103中的数据单位,统计信息可能是一些与列相关的信息,例如某列的最大值是100、最小值是-100,某张表包含200列等。
在一可选实施方式中,数据库103采用列式存储,并且在列式存储的基础上,基于“列”定义了一种新的数据单位,即行组。行组是列式存储中若干行形成的数据单位。这里的行是指数据库领域中传统意义上的数据行。在列式存储中,数据被逐列存储,在一个列中,数据被进一步分割为行组。可选地,以行组为单位,可以对行组内的数据进行独立压缩和信息统计。其中,信息统计的结果即为行组的统计信息,行组的统计信息主要用于描述行组存储数据的特征。参见图1c所示,列式存储中部分表格中包括列1、列2、列3以及其他列(图1c中未示出),另外还包括行组1、行组2、行组3以及其它行组(图1c中未示出)。在图1c中,列与行组的交叉部分表示该列包含的行组单元,每个交叉部分中的黑框表示该行组的统计信息,灰色框表示该行组包含的各行数据压缩后形成的数据包。参见图1c可知,从“行组”的角度来看,一个“行组”涉及若干列,每个列对应的部分称为行组单元;从列的角度来看,一个“列”包含若干个行组单元,若干个行组单元分别属于若干个行组。在此说明,本申请实施例并不限定若干个的具体数量,可以根据应用场景适应性设定。
在“行组”概念的基础上,数据库103中的统计信息是与行组相关的统计信息,这些统计信息主要用于记录行组存储数据的相关特征。例如,可能是与行组中各行数据相关的统计信息,例如是否均匀分布,行数、最大值、最小值,某些数值的分布图,例如直方图、分布图。又例如,还可以是某个列包含的行组的统计信息,例如包含的行组数,各行组中的最大值、最小值等。基于此,优化器1022对原始语法树进行优化处理时,可以获取原始语法树所关联行组的统计信息,根据原始语法树所关联行组的统计信息对原始语法树进行优化处理,从而得到优化后的语法树。原始语法树所关联的行组是指原始语法树中的表达式会涉及的行组。以原始语法树中的一个表达式A+B>100为例,A和B是两个相关列,则A和B两个列包含的行组属于原始语法树所关联的行组。
值得说明的是,在“行组”概念的基础上,本实施例中结合统计信息的优化处理过程,与现有结合统计信息的优化处理过程类型,区别仅在于:统计信息涉及的数据单位有所不同而已,结合统计信息的优化处理过程不做详述。
在本申请上述实施例或下述实施例中,优化器1022优化得到至少一个逻辑执行计划之后,可以从至少一个逻辑执行计划中识别出表达式可动态优化的目标逻辑执行计划。可选地,可以结合表达式的类型,来判断一个表达式是否可动态优化。有些类型的表达式在执行时可能会被进一步优化,而有些类型的表达式在执行时不可能被进一步优化。基于此,可以根据至少一个逻辑执行计划包含的表达式的类型,从中确定可动态优化的表达式;进而将包含可动态优化的表达式的逻辑执行计划作为目标逻辑执行计划。
可选地,本实施例列举几种在执行时可能会被进一步优化的表达式类型,例如,逻辑表达式、可以利用布隆过滤的表达式或可以利用数值统计进行简化的表达式,但并不限于这些类型。其中,逻辑表达式的示例包含但不限于:A>1,A=1,A<1等,在执行时有可能将这些表达式优化成“真”或“假”这种常量。可以利用布隆过滤(bloom filter)的表达式的示例包含但不限于:A in(1,21,8,12),该表达式用于逐个判断当前行组是否存在1,21,8,12,在执行时有可能部分或者全部优化掉in的条件。可以利用数值统计进行简化的表达式的示例包含但不限于:histogram(A>2 and A<9),该表达式用于统计行组A中大于2且小于9的数值个数,在执行时有可能被优化成具体的常量。例如假设有一行组A包括三行,数值分别为1,10,1,行组A对应的统计信息包括:行组A的最大值为10,最小值为1,且数值分布上只集中在1和10两个数值上,基于该统计信息进行优化,可知A>2 and A<9的数值并不存在,所以histogram(A>2 and A<9)的优化结果为0,这样就可以省略查表统计的过程了,有利于节约资源,提高查询效率。
结合上述列举的在执行时可能会被进一步优化的表达式类型,针对任一逻辑执行计划包含的表达式,可以判断该表达式是否属于逻辑表达式,或者是否可以利用布隆过滤,或者是否可以针对指定对象利用数值统计进行简化;若任一判断结果为是,则确定该表达式可动态优化,进而可以确定包含该表达式的逻辑执行计划属于目标逻辑执行计划。
在本申请上述实施例或下述实施例中,在获得目标逻辑执行计划后,可针对目标逻辑执行计划生成中间执行计划。例如,可以将目标逻辑执行计划中的逻辑算子替换为相应的物理算子,然后根据物理算子与目标逻辑执行计划包含的可动态优化的表达式生成中间执行计划。该中间执行计划被送入执行器1024之后,执行器1024可调用优化器1022对中间执行计划中可动态优化的表达式进行优化以得到表达式优化结果。
可选地,执行器1024可以将中间执行计划中可动态优化的表达式以及与该可动态优化的表达式相关的统计信息输入优化器1022,然后优化器1022根据可动态优化的表达式相关的统计信息对该可动态优化的表达式进行优化处理,从而得到表达式优化结果。
与前述统计信息类似,根据数据库103采用的存储格式的不同,数据库103的统计信息也会有所不同。可选地,在上述“行组”概念的基础上,执行器1024可以将中间执行计划中可动态优化的表达式以及该可动态优化的表达式所关联的行组的统计信息输入优化器1022;优化器1022根据该可动态优化的表达式所关联的行组的统计信息对该可动态优化的表达式进行优化处理,从而得到表达式优化结果。
其中,可动态优化的表达式所关联的行组可能是一个,也可能是多个。对于可动态优化的表达式所关联的行组是一个的情况,执行器1024可以获取可动态优化的表达式所关联的这一个行组的统计信息并将其输入优化器1022即可。
对于可动态优化的表达式所关联的行组是多个的情况,执行器1024可以依次将多个行组中每个行组的统计信息送入优化器1022,这样优化器1022可以针对每个行组分别对可动态优化的表达式进行优化处理。或者
对于可动态优化的表达式所关联的行组是多个的情况,执行器1024可以根据多个行组的统计信息的相关度,对多个行组的统计信息进行合并以得到至少一个合并行组的统计信息,依次将每个合并行组的统计信息送入优化器,以供优化器针对每个合并行组分别对可动态优化的表达式进行优化处理。
可选地,可以将相同或类似的统计信息进行合并,或者,也可以利用行组中数据的相似度体现相应行组的统计信息的相关度,进而可根据行组中数据的相似度,将相似度较高的行组的统计信息进行合并。为便于区分,将涉及统计信息合并的几个行组称为合并行组,合并行组对应合并后的统计信息。
在本申请上述实施例或下述实施例中,在将中间执行计划中可动态优化的表达式以及该可动态优化的表达式所关联的行组的统计信息输入优化器1022之后,优化器1022可根据该可动态优化的表达式所关联的行组的统计信息对该可动态优化的表达式进行优化处理。值得说明的是,优化器1022对可动态优化的表达式进行优化处理,可以不用像上文中对原始语法树进行优化处理那样执行完整的优化流程,可以主要进行结合统计信息的推导,常量推导等几种优化处理即可。
可选地,优化器1022可根据可动态优化的表达式的类型以及可动态优化的表达式所关联的行组的统计信息,对可动态优化的表达式进行常量推导以得到表达式优化结果。
仍以“行组”概念为基础,假设可动态优化的表达式为C+D>100,其中,C与D是相关列,执行器1024可以根据相关列C、D以及当前的行组从存储引擎中读取相关的统计信息,将统计信息传递给优化器1022,从而使用优化器1022已有的优化能力,对可动态优化的表达式为C+D>100进行优化。例如,针对表达式C+D>100,假设C列为整形且C列中当前行组的最大值为10,D列也为整形且D列中当前行组的最大值为20,则可以判断表达式C+D的结果为整形且最大值为30,进一步做推导可以得出上述表达式恒为假,此时可以直接返回结果,省去了无用的执行表达式的生成过程,也无需再进行相关查询操作,有利于提高查询效率。
值得说明的是,对可动态优化的表达式进行优化得到的表达式优化结果可能仅包含常量,也可能是既包含常量也包含非常量(例如,表达式中的一部分被优化),或者也可能仅包含非常量(例如,表达式仍需生成执行表达式)。
对于表达式优化结果仅包含常量的情况,执行器1024可以将常量作为查询结果直接返回给客户端101。对于表达式优化结果包含非常量的情况,可以继续根据表达式优化结果生成执行表达式,根据执行表达式和中间执行计划中的算子(物理算子)生成物理执行计划,运行该物理执行计划以获得查询结果并返回给客户端101。
可选地,一种情况下,优化器1022除了具有优化功能,还可以包含执行计划生成功能。在该情况下,在得到包含非常量的表达式优化结果时,执行器1024可以进一步调用优化器1022中的执行计划生成功能针对该表达式优化结果生成执行表达式进而生成物理执行计划。
可选地,在另一种情况下,优化器1022仅具有优化功能,优化器1022与执行器1024之间还具有执行计划生成器,则在得到包含非常量的表达式优化结果时,执行器1024可以调用执行计划生成器针对该表达式优化结果生成执行表达式进而生成物理执行计划。
在本申请上述实施例或下述实施例中,执行器1024需要调用优化器1022。为了便于执行器1024调用优化器1022,可以采用以下处理方式:
方式1:将优化器1022和执行器1024封装到一个程序模块中,在该程序模块中会有优化器1022和执行器1024的接口声明,这样执行器1024可基于优化器1022在该程序模块内的接口声明调用优化器1022,这种程序模块内的调用很容易实现。
方式2:将优化器1022作为独立的程序模块,为其抽象出一个接口函数,该接口函数用于供其它模块对优化器1022进行调用。然后,通过逻辑层级更高的程序模块,将优化器1022的接口函数传入执行器1024,这样执行器1024可基于优化器1022的接口函数调用优化器1022。
方式3:将优化器1022对应的可执行文件加入动态库中,这样执行器1024可以在动态库加载过程中通过搜索优化器1022的接口函数符号实现对优化器1022的调用。
当然,除了上述三种方式之外,还可以采用其它的方式达到执行器1024成功调用优化器1022的目的。
本申请实施例除了提供了上述系统实施例之外,还提供一些数据库查询优化方法实施例,这些方法实施例是从数据库引擎的角度进行的描述。如图2a所示,一种数据库查询优化方法包括以下步骤:
201、运行优化器对数据库查询语句进行优化处理以得到至少一个逻辑执行计划,每个逻辑执行计划包括表达式;
202、从至少一个逻辑执行计划中识别出包含可动态优化的表达式的目标逻辑执行计划;
203、在运行时执行器调用优化器对可动态优化的表达式进行优化以得到表达式优化结果,并根表达式优化结果获取查询结果。
在本实施例中,通过识别可动态优化的表达式,在运行时执行器调用优化器对可动态优化的表达式进行优化,利用优化器已有的优化技术实现了执行时动态优化表达式的目的,这不仅提升了执行时表达式优化的能力,而且基于优化器已有优化技术的动态优化耗时相对较少,避免了优化性能提升被动态优化耗时所抵消的问题,有利于进一步提高查询效率。
可选地,如图2b所示,步骤203的一种实现方式包括:
2031、针对目标逻辑执行计划生成中间执行计划并送入执行器,中间执行计划包括目标逻辑执行计划中可动态优化的表达式;
2032、运行执行器调用优化器对中间执行计划中可动态优化的表达式进行优化以得到表达式优化结果,并根据表达式优化结果获取查询结果。
在上述实现方式中,在得到数据库查询语句对应的至少一个逻辑执行计划后,并未直接生成物理执行计划,而是识别包含可动态优化的表达式的逻辑执行计划,针对包含可动态优化的表达式的逻辑执行计划生成中间执行计划并送入执行器,执行器调用优化器对中间执行计划中的表达式进行优化,利用优化器已有的优化技术实现执行时动态优化表达式的目的,这不仅提升了执行时表达式优化的能力,而且基于优化器已有优化技术的动态优化耗时相对较少,避免了优化性能提升被动态优化耗时所抵消的问题,有利于进一步提高查询效率。
另外,在本实施例中,执行器直接调用优化器,可以充分利用优化器中已有的优化技术,无需在优化器中实现同样的优化技术,避免了相同的优化技术在执行器和优化器中同时存在造成的代码管理压力,有利于减轻代码管理压力,而且也避免了执行表达式体系在执行阶段的割裂。
在一些可选实施例中,在步骤201之前,还可以对数据库查询语句进行语法解析,将数据库查询语句解析成一颗语法树。基于此,在步骤201中,可以将由数据库查询语句语法解析出的原始语法树输入优化器;运行优化器对原始语法树进行优化处理以得到优化后的语法树,优化后的语法树包含至少一个逻辑执行计划。
进一步可选地,在上述运行优化器对原始语法树进行优化处理的过程中,可以结合原始语法树相关的统计信息。值得说明的是,根据数据库采用的存储格式的不同,数据库的统计信息也会有所不同。在一可选实施方式中,数据库采用列式存储,并且在列式存储的基础上,基于“列”定义了一种新的数据单位,即行组。行组是列式存储中若干行形成的数据单位。在列式存储中,数据被逐列存储,在一个列中,数据被进一步分割为行组,并以行组为单位进行独立压缩,关于行组可以参见图1c。
在“行组”概念的基础上,数据库中的统计信息是与行组相关的统计信息,这些统计信息主要用于记录行组存储数据的相关特征。基于此,优化器对原始语法树进行优化处理时,可以获取原始语法树所关联行组的统计信息,行组是列式存储中若干行形成的数据单位;根据原始语法树所关联行组的统计信息对原始语法树进行优化处理,以得到优化后的语法树。
在一些可选实施例中,在步骤202中,可以根据至少一个逻辑执行计划包含的表达式的类型,从中确定可动态优化的表达式;将包含可动态优化的表达式的逻辑执行计划作为目标逻辑执行计划。
可选地,本实施例列举几种在执行时可能会被进一步优化的表达式类型,例如,逻辑表达式、可以利用布隆过滤的表达式或可以利用数值统计进行简化的表达式,但并不限于这些类型。结合上述列举的在执行时可能会被进一步优化的表达式类型,针对任一逻辑执行计划包含的表达式,若该表达式是逻辑表达式,或者是可以利用布隆过滤的表达式,或者是可以利用数值统计进行简化的表达式,则确定该表达式可动态优化。
在一些可选实施例中,在步骤2032中,可以将中间执行计划中可动态优化的表达式以及可动态优化的表达式所关联的行组的统计信息输入优化器;运行优化器根据可动态优化的表达式所关联的行组的统计信息对可动态优化的表达式进行优化处理以得到表达式优化结果。
其中,可动态优化的表达式所关联的行组可能是一个,也可能是多个。对于可动态优化的表达式所关联的行组是一个的情况,执行器可以获取可动态优化的表达式所关联的这一个行组的统计信息并将其输入优化器即可。
对于可动态优化的表达式所关联的行组是多个的情况,执行器可以依次将多个行组中每个行组的统计信息送入优化器,以供优化器针对每个行组对可动态优化的表达式进行优化处理;或者,可以根据多个行组的统计信息的相关度,对多个行组的统计信息进行合并以得到至少一个合并行组的统计信息,依次将每个合并行组的统计信息送入优化器,以供优化器针对每个合并行组对可动态优化的表达式进行优化处理。
可选地,可以将相同或类似的统计信息进行合并,或者,也可以利用行组中数据的相似度体现相应行组的统计信息的相关度,进而可根据行组中数据的相似度,将相似度较高的行组的统计信息进行合并。为便于区分,将涉及统计信息合并的几个行组称为合并行组,合并行组对应合并后的统计信息。
可选地,上述优化器根据可动态优化的表达式所关联的行组的统计信息对可动态优化的表达式进行优化处理以得到表达式优化结果,包括:根据可动态优化的表达式的类型以及可动态优化的表达式所关联的行组的统计信息,对可动态优化的表达式进行常量推导以得到表达式优化结果。
值得说明的是,对可动态优化的表达式进行优化得到的表达式优化结果可能仅包含常量,也可能是既包含常量也包含非常量(例如,表达式中的一部分被优化),或者也可能仅包含非常量(例如,表达式仍需生成执行表达式)。
进一步可选地,上述步骤203或2032中,根据表达式优化结果获取查询结果的过程包括:若表达式优化结果仅包含常量,则将常量作为查询结果;若表达式优化结果包含非常量,则可以根据表达式优化结果生成执行表达式,根据执行表达式和中间执行计划中的算子生成物理执行计划,运行物理执行计划以获得查询结果。
在本申请实施例中,执行器需要调用优化器。为了便于执行器调用优化器,可以采用以下处理方式:
方式1:将优化器与执行器封装到一个程序模块中,以供执行器基于优化器在程序模块内的接口声明调用优化器。
方式2:将优化器作为独立的程序模块抽象出一个接口函数,并将接口函数传入执行器,以供执行器基于接口函数调用优化器。
方式3:将优化器对应的可执行文件加入动态库,以供执行器在动态库加载过程中调用优化器。
在本申请上述实施例中,通过识别可动态优化的表达式,针对可动态优化的表达式生成中间执行计划送入执行器,执行器调用优化器对中间执行计划中的表达式进行优化,利用优化器已有的优化技术实现了执行时动态优化表达式的目的,这不仅提升了执行时表达式优化的能力,而且基于优化器已有优化技术的动态优化耗时相对较少,避免了优化性能提升被动态优化耗时所抵消的问题,有利于进一步提高查询效率。
需要说明的是,上述实施例所提供方法的各步骤的执行主体均可以是同一设备,或者,该方法也由不同设备作为执行主体。比如,步骤201至步骤203的执行主体可以为设备A;又比如,步骤201和202的执行主体可以为设备A,步骤203的执行主体可以为设备B;等等。
另外,在上述实施例及附图中的描述的一些流程中,包含了按照特定顺序出现的多个操作,但是应该清楚了解,这些操作可以不按照其在本文中出现的顺序来执行或并行执行,操作的序号如201、202等,仅仅是用于区分开各个不同的操作,序号本身不代表任何的执行顺序。另外,这些流程可以包括更多或更少的操作,并且这些操作可以按顺序执行或并行执行。需要说明的是,本文中的“第一”、“第二”等描述,是用于区分不同的消息、设备、模块等,不代表先后顺序,也不限定“第一”和“第二”是不同的类型。
图3为本申请示例性实施例提供的一种数据库引擎的结构示意图。如图3所示,该引擎包括:存储器301和处理器302。
存储器301,用于存储计算机程序,并可被配置为存储其它各种数据以支持在数据库引擎上的操作。这些数据的示例包括用于在数据库引擎上操作的任何应用程序或方法的指令,联系人数据,电话簿数据,消息,图片,视频,优化器和执行器等。这里的优化器和执行器是软件的程序代码。
存储器301可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。
处理器302,与存储器301耦合,用于执行存储器301中的计算机程序,以用于:运行优化器对数据库查询语句进行优化处理以得到至少一个逻辑执行计划,每个逻辑执行计划包括表达式;从至少一个逻辑执行计划中识别出包含可动态优化的表达式的目标逻辑执行计划;在运行时执行器调用优化器对可动态优化的表达式进行优化以得到表达式优化结果,并根据表达式优化结果获取查询结果。。
在一可选实施方式中,处理器302在得到至少一个逻辑执行计划时,具体用于:将由数据库查询语句语法解析出的原始语法树输入优化器;运行优化器对原始语法树进行优化处理以得到优化后的语法树,优化后的语法树包含至少一个逻辑执行计划。
在一可选实施方式中,处理器302在得到优化后的语法树时,具体用于:获取原始语法树所关联行组的统计信息,行组是列式存储中若干行形成的数据单位;根据原始语法树所关联行组的统计信息对原始语法树进行优化处理,以得到优化后的语法树。
在一可选实施方式中,处理器302在识别目标逻辑执行计划时,具体用于:根据至少一个逻辑执行计划包含的表达式的类型,从中确定可动态优化的表达式;将包含可动态优化的表达式的逻辑执行计划作为目标逻辑执行计划。
进一步可选地,处理器302在确定可动态优化的表达式时,具体用于:针对任一逻辑执行计划包含的表达式,若表达式是逻辑表达式,或者是可以利用布隆过滤的表达式,或者是可以利用数值统计进行简化的表达式,则确定该表达式可动态优化。
在一可选实施方式中,处理器302在得到表达式优化结果时,具体用于:针对目标逻辑执行计划生成中间执行计划并送入执行器;运行执行器调用优化器对中间执行计划中可动态优化的表达式进行优化以得到表达式优化结果;其中,中间执行计划包括目标逻辑执行计划中可动态优化的表达式。
进一步可选地,处理器302具体用于:将中间执行计划中可动态优化的表达式以及可动态优化的表达式所关联的行组的统计信息输入优化器;运行优化器根据可动态优化的表达式所关联的行组的统计信息对可动态优化的表达式进行优化处理以得到表达式优化结果。
进一步可选地,处理器302在向优化器输入统计信息时,具体用于:
在可动态优化的表达式所关联的行组为多个时,依次将多个行组中每个行组的统计信息送入优化器,以供优化器针对每个行组对可动态优化的表达式进行优化处理;或者
在可动态优化的表达式所关联的行组为多个时,根据多个行组的统计信息的相关度,对多个行组的统计信息进行合并以得到至少一个合并行组的统计信息,依次将每个合并行组的统计信息送入优化器,以供优化器针对每个合并行组对可动态优化的表达式进行优化处理。
在一可选实施方式中,处理器302在获取查询结果时,具体用于:若表达式优化结果仅包含常量,则将常量作为查询结果;若表达式优化结果包含非常量,根据表达式优化结果生成执行表达式,根据执行表达式和中间执行计划中的算子生成物理执行计划,运行物理执行计划以获得查询结果。
进一步,如图3所示,该数据库引擎还包括:通信组件303和电源组件304等其它组件。图3仅示意性给出部分组件,并不意味着数据库引擎只包括图3所示组件。
其中,通信组件被配置为便于通信组件所在设备和其他设备之间有线或无线方式的通信。通信组件所在设备可以接入基于通信标准的无线网络,如WiFi,2G或3G,或它们的组合。在一个示例性实施例中,通信组件经由广播信道接收来自外部广播管理系统的广播信号或广播相关信息。在一个示例性实施例中,所述通信组件还包括近场通信(NFC)模块,以促进短程通信。例如,在NFC模块可基于射频识别(RFID)技术,红外数据协会(IrDA)技术,超宽带(UWB)技术,蓝牙(BT)技术和其他技术来实现。
其中,电源组件为电源组件所在设备的各种组件提供电力。电源组件可以包括电源管理系统,一个或多个电源,及其他与为电源组件所在设备生成、管理和分配电力相关联的组件。
在本实施例提供的数据库引擎,通过识别可动态优化的表达式,针对可动态优化的表达式生成中间执行计划送入执行器,执行器调用优化器对中间执行计划中的表达式进行优化,利用优化器已有的优化技术实现了执行时动态优化表达式的目的,这不仅提升了执行时表达式优化的能力,而且基于优化器已有优化技术的动态优化耗时相对较少,避免了优化性能提升被动态优化耗时所抵消的问题,有利于进一步提高查询效率。
相应地,本申请实施例还提供一种存储有计算机程序的计算机可读存储介质,计算机程序被执行时能够实现上述方法实施例中可由数据库引擎执行的各步骤。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。
Claims (20)
1.一种数据库查询优化方法,其特征在于,包括:
运行优化器对数据库查询语句进行优化处理以得到至少一个逻辑执行计划,每个逻辑执行计划包括表达式;
从所述至少一个逻辑执行计划中识别出包含可动态优化的表达式的目标逻辑执行计划;
在运行时执行器调用所述优化器对所述可动态优化的表达式进行优化以得到表达式优化结果,并根据所述表达式优化结果获取查询结果。
2.根据权利要求1所述的方法,其特征在于,运行优化器对数据库查询语句进行优化处理以得到至少一个逻辑执行计划,包括:
将由所述数据库查询语句语法解析出的原始语法树输入所述优化器;
运行所述优化器对所述原始语法树进行优化处理以得到优化后的语法树,所述优化后的语法树包含至少一个逻辑执行计划。
3.根据权利要求2所述的方法,其特征在于,运行所述优化器对所述原始语法树进行优化处理以得到优化后的语法树,包括:
获取所述原始语法树所关联行组的统计信息,所述行组是列式存储中若干行形成的数据单位;
根据所述原始语法树所关联行组的统计信息对所述原始语法树进行优化处理,以得到所述优化后的语法树。
4.根据权利要求1所述的方法,其特征在于,从所述至少一个逻辑执行计划中识别出包含可动态优化的表达式的目标逻辑执行计划,包括:
根据所述至少一个逻辑执行计划包含的表达式的类型,从中确定可动态优化的表达式;
将包含可动态优化的表达式的逻辑执行计划作为所述目标逻辑执行计划。
5.根据权利要求4所述的方法,其特征在于,根据所述至少一个逻辑执行计划包含的表达式的类型,从中确定可动态优化的表达式,包括:
针对任一逻辑执行计划包含的表达式,若所述表达式是逻辑表达式,或者是可以利用布隆过滤的表达式,或者是可以利用数值统计进行简化的表达式,则确定所述表达式可动态优化。
6.根据权利要求1所述的方法,其特征在于,在运行时执行器调用所述优化器对所述可动态优化的表达式进行优化以得到表达式优化结果,包括:
针对所述目标逻辑执行计划生成中间执行计划并送入执行器,所述中间执行计划包括所述目标逻辑执行计划中可动态优化的表达式;
运行所述执行器调用所述优化器对所述中间执行计划中可动态优化的表达式进行优化以得到表达式优化结果。
7.根据权利要求6所述的方法,其特征在于,运行所述执行器调用所述优化器对所述中间执行计划中可动态优化的表达式进行优化以得到表达式优化结果,包括:
将所述中间执行计划中可动态优化的表达式以及所述可动态优化的表达式所关联的行组的统计信息输入所述优化器;
运行所述优化器根据所述可动态优化的表达式所关联的行组的统计信息对所述可动态优化的表达式进行优化处理以得到所述表达式优化结果。
8.根据权利要求7所述的方法,其特征在于,所述可动态优化的表达式所关联的行组为多个,则将所述可动态优化的表达式所关联的行组的统计信息输入所述优化器,包括:
依次将所述多个行组中每个行组的统计信息送入所述优化器,以供所述优化器针对每个行组对所述可动态优化的表达式进行优化处理;或者
根据所述多个行组的统计信息的相关度,对所述多个行组的统计信息进行合并以得到至少一个合并行组的统计信息,依次将每个合并行组的统计信息送入所述优化器,以供所述优化器针对每个合并行组对所述可动态优化的表达式进行优化处理。
9.根据权利要求7所述的方法,其特征在于,所述优化器根据所述可动态优化的表达式所关联的行组的统计信息对所述可动态优化的表达式进行优化处理以得到所述表达式优化结果,包括:
根据所述可动态优化的表达式的类型以及所述可动态优化的表达式所关联的行组的统计信息,对所述可动态优化的表达式进行常量推导以得到所述表达式优化结果。
10.根据权利要求9所述的方法,其特征在于,根据所述表达式优化结果获取查询结果,包括:
若所述表达式优化结果仅包含常量,则将所述常量作为查询结果;
若所述表达式优化结果包含非常量,根据所述表达式优化结果生成执行表达式,根据所述执行表达式和所述中间执行计划中的算子生成物理执行计划,运行所述物理执行计划以获得所述查询结果。
11.根据权利要求1-10任一项所述的方法,其特征在于,还包括:
将所述优化器与所述执行器封装到一个程序模块中,以供所述执行器基于所述优化器在所述程序模块内的接口声明调用所述优化器;或者
将所述优化器作为独立的程序模块抽象出一个接口函数,并将所述接口函数传入所述执行器,以供所述执行器基于所述接口函数调用所述优化器;或者将所述优化器对应的可执行文件加入动态库,以供所述执行器在所述动态库加载过程中调用所述优化器。
12.一种数据库引擎,其特征在于,包括:存储器和处理器;
存储器,用于存储计算机程序、优化器和执行器;
处理器,用于执行所述计算机程序,以用于:
运行所述优化器对数据库查询语句进行优化处理以得到至少一个逻辑执行计划,每个逻辑执行计划包括表达式;
从所述至少一个逻辑执行计划中识别出包含可动态优化的表达式的目标逻辑执行计划;
在运行时执行器调用所述优化器对所述可动态优化的表达式进行优化以得到表达式优化结果,并根据所述表达式优化结果获取查询结果。
13.根据权利要求12所述的数据库引擎,其特征在于,所述处理器在得到至少一个逻辑执行计划时,具体用于:
将由所述数据库查询语句语法解析出的原始语法树输入所述优化器;
运行所述优化器对所述原始语法树进行优化处理以得到优化后的语法树,所述优化后的语法树包含至少一个逻辑执行计划。
14.根据权利要求13所述的数据库引擎,其特征在于,所述处理器在得到优化后的语法树时,具体用于:
获取所述原始语法树所关联行组的统计信息,所述行组是列式存储中若干行形成的数据单位;
根据所述原始语法树所关联行组的统计信息对所述原始语法树进行优化处理,以得到所述优化后的语法树。
15.根据权利要求12所述的数据库引擎,其特征在于,所述处理器在识别目标逻辑执行计划时,具体用于:
根据所述至少一个逻辑执行计划包含的表达式的类型,从中确定可动态优化的表达式;
将包含可动态优化的表达式的逻辑执行计划作为所述目标逻辑执行计划。
16.根据权利要求15所述的数据库引擎,其特征在于,所述处理器在确定可动态优化的表达式时,具体用于:
针对任一逻辑执行计划包含的表达式,若所述表达式是逻辑表达式,或者是可以利用布隆过滤的表达式,或者是可以利用数值统计进行简化的表达式,则确定所述表达式可动态优化。
17.根据权利要求12-16任一项所述的数据库引擎,其特征在于,所述处理器在得到表达式优化结果时,具体用于:
针对所述目标逻辑执行计划生成中间执行计划并送入执行器,所述中间执行计划包括所述目标逻辑执行计划中可动态优化的表达式;
运行所述执行器调用所述优化器对所述中间执行计划中可动态优化的表达式进行优化以得到表达式优化结果。
18.根据权利要求17所述的数据库引擎,其特征在于,所述处理器具体用于:
将所述中间执行计划中可动态优化的表达式以及所述可动态优化的表达式所关联的行组的统计信息输入所述优化器;
运行所述优化器根据所述可动态优化的表达式所关联的行组的统计信息对所述可动态优化的表达式进行优化处理以得到所述表达式优化结果。
19.根据权利要求18所述的数据库引擎,其特征在于,所述处理器在向所述优化器输入统计信息时,具体用于:
在所述可动态优化的表达式所关联的行组为多个时,依次将所述多个行组中每个行组的统计信息送入所述优化器,以供所述优化器针对每个行组对所述可动态优化的表达式进行优化处理;或者
在所述可动态优化的表达式所关联的行组为多个时,根据所述多个行组的统计信息的相关度,对所述多个行组的统计信息进行合并以得到至少一个合并行组的统计信息,依次将每个合并行组的统计信息送入所述优化器,以供所述优化器针对每个合并行组对所述可动态优化的表达式进行优化处理。
20.一种存储有计算机程序的计算机可读存储介质,其特征在于,当所述计算机程序被处理器执行时,致使所述处理器能够实现权利要求1-10任一项所述方法中的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811160796.1A CN110968594B (zh) | 2018-09-30 | 2018-09-30 | 数据库查询优化方法、引擎及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811160796.1A CN110968594B (zh) | 2018-09-30 | 2018-09-30 | 数据库查询优化方法、引擎及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110968594A true CN110968594A (zh) | 2020-04-07 |
CN110968594B CN110968594B (zh) | 2023-04-07 |
Family
ID=70029176
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811160796.1A Active CN110968594B (zh) | 2018-09-30 | 2018-09-30 | 数据库查询优化方法、引擎及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110968594B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113297244A (zh) * | 2020-05-29 | 2021-08-24 | 阿里巴巴集团控股有限公司 | 数据库操作方法、装置、设备及存储介质 |
CN113992447A (zh) * | 2021-12-28 | 2022-01-28 | 北京未来智安科技有限公司 | 一种sql注入告警处理方法及装置 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO1998026360A1 (en) * | 1996-12-11 | 1998-06-18 | Tandem Computers, Inc. | System and method for optimizing database queries |
CN101131695A (zh) * | 2006-08-25 | 2008-02-27 | 北京书生国际信息技术有限公司 | 一种文档库系统及其实现方法 |
WO2011106006A1 (en) * | 2010-02-25 | 2011-09-01 | Hewlett-Packard Development Company, L.P. | Optimization method and apparatus |
CN104620239A (zh) * | 2012-09-28 | 2015-05-13 | 甲骨文国际公司 | 自适应查询优化 |
WO2015167466A1 (en) * | 2014-04-29 | 2015-11-05 | Hewlett-Packard Development Company, L.P. | Query plan post optimization analysis and reoptimization |
CN105279286A (zh) * | 2015-11-27 | 2016-01-27 | 陕西艾特信息化工程咨询有限责任公司 | 一种交互式大数据分析查询处理方法 |
CN105718593A (zh) * | 2016-01-28 | 2016-06-29 | 长春师范大学 | 一种数据库查询优化方法及系统 |
US20180060390A1 (en) * | 2016-08-31 | 2018-03-01 | Sap Se | Generating Faster and Efficient Database Query Execution Plans |
CN108170775A (zh) * | 2017-12-26 | 2018-06-15 | 上海新炬网络技术有限公司 | 一种数据库sql索引动态优化方法 |
-
2018
- 2018-09-30 CN CN201811160796.1A patent/CN110968594B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO1998026360A1 (en) * | 1996-12-11 | 1998-06-18 | Tandem Computers, Inc. | System and method for optimizing database queries |
CN101131695A (zh) * | 2006-08-25 | 2008-02-27 | 北京书生国际信息技术有限公司 | 一种文档库系统及其实现方法 |
WO2011106006A1 (en) * | 2010-02-25 | 2011-09-01 | Hewlett-Packard Development Company, L.P. | Optimization method and apparatus |
CN104620239A (zh) * | 2012-09-28 | 2015-05-13 | 甲骨文国际公司 | 自适应查询优化 |
WO2015167466A1 (en) * | 2014-04-29 | 2015-11-05 | Hewlett-Packard Development Company, L.P. | Query plan post optimization analysis and reoptimization |
CN105279286A (zh) * | 2015-11-27 | 2016-01-27 | 陕西艾特信息化工程咨询有限责任公司 | 一种交互式大数据分析查询处理方法 |
CN105718593A (zh) * | 2016-01-28 | 2016-06-29 | 长春师范大学 | 一种数据库查询优化方法及系统 |
US20180060390A1 (en) * | 2016-08-31 | 2018-03-01 | Sap Se | Generating Faster and Efficient Database Query Execution Plans |
CN108170775A (zh) * | 2017-12-26 | 2018-06-15 | 上海新炬网络技术有限公司 | 一种数据库sql索引动态优化方法 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113297244A (zh) * | 2020-05-29 | 2021-08-24 | 阿里巴巴集团控股有限公司 | 数据库操作方法、装置、设备及存储介质 |
CN113992447A (zh) * | 2021-12-28 | 2022-01-28 | 北京未来智安科技有限公司 | 一种sql注入告警处理方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN110968594B (zh) | 2023-04-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107402987B (zh) | 一种全文检索的方法和分布式NewSQL数据库系统 | |
US11068439B2 (en) | Unsupervised method for enriching RDF data sources from denormalized data | |
JP6617117B2 (ja) | 半構造データのためのスケーラブルな分析プラットフォーム | |
CN110968579B (zh) | 执行计划的生成与执行方法、数据库引擎及存储介质 | |
CN108369591B (zh) | 用于缓存和参数化ir的系统和方法 | |
CN105718593A (zh) | 一种数据库查询优化方法及系统 | |
CN110968594B (zh) | 数据库查询优化方法、引擎及存储介质 | |
WO2012027975A1 (zh) | 一种提升业务脚本执行效率的装置及方法 | |
CN106919566A (zh) | 一种基于海量数据的查询统计方法及系统 | |
CN110245184B (zh) | 一种基于tagSQL的数据处理方法、系统及装置 | |
CN117271584A (zh) | 数据处理方法及装置、计算机可读存储介质和电子设备 | |
CN115858154A (zh) | 一种异构加速方法、设备、系统及存储介质 | |
CN116049193A (zh) | 数据存储方法及装置 | |
CN113239039B (zh) | 动态数据的存储方法、查询方法、管理方法及管理系统 | |
CN116010461A (zh) | 数据血缘关系解析方法及装置、存储介质及电子设备 | |
CN113448942B (zh) | 数据库访问方法、装置、设备及存储介质 | |
CN113064914A (zh) | 数据提取方法及装置 | |
CN112783758B (zh) | 测试案例库与特征库生成方法、设备及存储介质 | |
CN110362595A (zh) | 一种sql语句动态解析方法 | |
CN115952203B (zh) | 数据查询方法、设备、系统及存储介质 | |
CN116303574A (zh) | 数据库操作语句优化及数据库操作方法、设备及介质 | |
CN113157726B (zh) | 一种数据库的处理方法及装置 | |
CN117251472B (zh) | 跨源数据处理方法、装置、设备及存储介质 | |
US11616744B2 (en) | Context-dependent message extraction and transformation | |
CN116955403B (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 |