CN115114325A - 数据查询方法、装置、电子设备以及存储介质 - Google Patents
数据查询方法、装置、电子设备以及存储介质 Download PDFInfo
- Publication number
- CN115114325A CN115114325A CN202210731062.4A CN202210731062A CN115114325A CN 115114325 A CN115114325 A CN 115114325A CN 202210731062 A CN202210731062 A CN 202210731062A CN 115114325 A CN115114325 A CN 115114325A
- Authority
- CN
- China
- Prior art keywords
- query
- target
- prompt
- access path
- block
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2453—Query optimisation
- G06F16/24534—Query rewriting; Transformation
- G06F16/24549—Run-time optimisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/242—Query formulation
- G06F16/2433—Query languages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2453—Query optimisation
- G06F16/24534—Query rewriting; Transformation
- G06F16/24542—Plan optimisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24553—Query execution of query operations
- G06F16/24558—Binary matching operations
- G06F16/2456—Join operations
-
- 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
- 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)
- Operations Research (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请实施例提供了一种数据查询方法、装置、电子设备以及存储介质,涉及大数据和云技术领域。数据查询方法包括:获取待处理的查询语句;基于查询语句生成查询语句的目标解析树;将目标解析树作为第一次查询优化操作的查询输入信息,重复执行查询优化操作直至满足预设条件;基于满足预设条件时已获取到的访问路径提示,得到查询语句对应的目标访问路径提示,以基于目标访问路径提示进行查询,得到对应的查询结果。可以有效提高查询效率,尤其是在进行复杂查询时效果更加明显。
Description
技术领域
本申请涉及计算机、大数据和云技术领域,具体而言,本申请涉及一种数据查询方法、装置、电子设备、计算机可读存储介质及计算机程序产品。
背景技术
在数据库中进行数据查询的过程中,需要基于访问路径提示进行查询,得到对应的查询结果,因此,数据库的访问路径提示的优化对于查询效率至关重要。
目前通常是根据预设的规则信息对访问路径提示进行优化,但预设的规则信息对于某些系统适应性较弱,例如针对复杂查询语句,基于预设规则难以优化得到最优的访问路径提示,导致查询效率较低。
发明内容
本申请实施例的目的旨在提供一种能够提高查询效率的数据查询方法、装置、电子设备以及存储介质,为了实现上述目的,本申请实施例提供的技术方案如下:
一方面,本申请实施例提供了一种数据查询的方法,该方法包括:
获取待处理的查询语句;
基于查询语句生成查询语句的目标解析树;
将目标解析树作为第一次查询优化操作的查询输入信息,重复执行查询优化操作直至满足预设条件;
基于满足预设条件时已获取到的访问路径提示,得到查询语句对应的目标访问路径提示,以基于目标访问路径提示进行查询,得到对应的查询结果;
其中,查询优化操作包括:
基于查询输入信息执行查询操作,得到查询提示信息,查询提示信息包括访问路径提示和行数提示,行数提示提示了查询到的目标数据的数目;
若不满足预设条件,则将当前次查询优化操作得到的行数提示和上一次查询优化操作所基于的行数提示合并,并将合并后的行数提示和目标解析树作为下一次查询优化操作的查询输入信息。
在一些可能的实施方式中,每个查询优化操作得到的访问路径提示包括:查询语句所要查询的各目标表的连接顺序提示;
预设条件包括第一条件,第一条件包括:
当前次查询优化操作和上一次查询优化操作得到访问路径提示的连接顺序提示相同,或者,当前次查询优化操作和上一次查询优化操作得到的行数提示相同,或者,查询优化操作的执行次数达到第一设定值。
在一些可能的实施方式中,预设条件还包括第二条件,第二条件包括:查询优化操作的执行次数不小于第二设定值,其中,第二设定值小于第一设定值;
对应每次查询优化操作,在满足第一条件但不满足第二条件时,方法还包括:
基于预设的查询提示生成策略,生成种子查询提示;
其中,下一次查询优化操作的查询输入信息还包括种子查询提示。
在一些可能的实施方式中,查询提示信息还包括查询操作的执行时间;
基于满足预设条件时已获取到的访问路径提示,确定查询语句对应的目标访问路径提示,包括以下任一项:
将最后一次查询优化操作得到的访问路径提示,作为目标访问路径提示;
根据各次查询优化操作对应的执行时间,将执行时间最短的查询优化操作得到的访问路径提示,作为目标访问路径提示。
在一些可能的实施方式中,目标解析树对应至少一个查询块,在生成查询语句的目标解析树之后,方法还包括:
对于每个查询块,确定查询块所涉及的各个目标表在目标解析树中的位置;
对于每个目标表,根据目标表在目标解析树中位置,确定每个目标表的表标识;
基于查询输入信息执行查询操作,得到查询提示信息,包括:
基于查询输入信息和确定出的各个目标表的表标识,生成查询语句对应的查询计划;
基于查询计划和目标解析树执行查询操作,得到查询提示信息。
在一些可能的实施方式中,基于查询计划和目标解析树执行查询操作,得到查询提示信息,包括:
基于目标解析树和查询计划,生成查询语句对应的执行结构,其中,执行结构中包括第一指示信息,第一指示信息指示了在执行查询操作的过程中扫描目标表时,被扫描的目标表所属的目标查询块、以及目标表在目标查询块的查询范围表中的位置;
按照执行结构执行查询操作,生成查询提示信息,查询提示信息中的访问路径提示包括:基于第一指示信息得到的每个查询块所涉及的各个目标表的扫描方式提示。
在一些可能的实施方式中,对于每个查询块,目标解析树和执行结构中包括各个查询块所涉及的每个目标表的表结构体,其中,表结构体中包括第一成员变量,第一成员变量指示了:表结构体对应的目标表所属的目标查询块的标识、以及表结构体对应的目标表在目标查询块的查询范围表中的位置;
其中,第一指示信息包括各个表结构体中的第一成员变量。
在一些可能的实施方式中,执行结构中还包括第二指示信息,第二指示信息指示了每个查询块所对应的父查询块、以及具有父子关系的查询块中子查询块所涉及的目标表与父查询块所涉及的目标表之间的对应关系;
查询提示信息中的访问路径提示还包括至少一条连接方式提示,每条连接方式提示用于提示至少两个目标表的连接方式;
对于每条连接方式提示,若连接方式提示对应的至少两个目标表中包括具有至少两个层级的查询块的目标表,方法还包括:
对于连接方式提示对应的每个第一表,根据第二指示信息,确定第一表所对应的第二表,其中,第一表是至少两个层级的查询块的目标表中除最高层级的查询块的目标表之外的目标表,第一表对应的第二表是最高层级的查询块的目标表中第一表对应的目标表;
根据每个第一表对应的第二表,将连接方式提示更新为最高层级的查询块的至少两个目标表之间的连接方式提示。
在一些可能的实施方式中,对于每个查询块,目标解析树和执行结构中包括各个查询块所涉及的每个目标表的表结构体,其中,表结构体中包括第二成员变量,第二成员变量指示了:表结构体对应的目标表所属的目标查询块的父查询块的标识、以及表结构体对应的目标表的父关联表的位置,其中,父关联表是指表结构体对应的目标表在父查询块的目标表中所对应的目标表,父关联表的位置是指父关联表在父查询块的查询范围表中的位置;
其中,第二指示信息包括各个表结构体中的第二成员变量。
在一些可能的实施方式中,每次查询优化操作得到的访问路径提示中还包括至少一条连接顺序提示,每条连接顺序提示提示了至少两个目标表的连接顺序;
对于每条连接顺序提示,若连接顺序提示对应的至少两个目标表中包括具有至少两个层级的查询块的目标表,方法还包括:
对于连接顺序提示对应的每个第一表,根据第二指示信息,确定第一表对应的第二表;
根据每个第一表对应的第二表,将连接顺序提示更新为至少两个层级中最高层级的查询块的至少两个目标表之间的连接顺序提示;
若具有至少两个层级的查询块的目标表中包括同一子查询块的至少两个目标表,根据连接顺序提示中同一子查询块的至少两个目标表的连接顺序,生成同一子查询块的连接顺序提示;
查询提示信息中的访问路径提示还包括同一子查询块的连接顺序提示。
在一些可能的实施方式中,基于查询语句,生成查询语句的目标解析树,包括:
基于查询语句,在访问路径提示数据库中进行查询,其中,访问路径提示数据库中存储有至少一个查询语句对应的访问路径提示;
若在访问路径提示数据库中未查询到查询语句对应的访问路径提示,则基于查询语句生成查询语句的目标解析树;
若访问路径提示数据库中查询到查询语句对应的访问路径提示,方法还包括:
将查询到的访问路径提示确定为查询语句对应的目标访问路径提示;
若在访问路径提示数据库中未查询到查询语句对应的访问路径提示,在确定出查询语句对应的目标访问路径提示之后,方法还包括:
将查询语句的目标访问路径提示关联存储到访问路径提示数据库中。
在一些可能的实施方式中,查询语句是基于复杂语句判断条件确定出的复杂查询语句。
另一方面,本申请实施例提供了一种数据查询装置,该装置包括:
获取模块,用于获取待处理的查询语句;
第一生成模块,用于基于查询语句生成查询语句的目标解析树;
优化模块,用于将目标解析树作为第一次查询优化操作的查询输入信息,重复执行查询优化操作直至满足预设条件;
查询模块,用于基于满足预设条件时已获取到的访问路径提示,得到查询语句对应的目标访问路径提示,以基于目标访问路径提示进行查询,得到对应的查询结果;
其中,优化模块在执行查询优化操作时,具体用于:
基于查询输入信息执行查询操作,得到查询提示信息,查询提示信息包括访问路径提示和行数提示,行数提示提示了查询到的目标数据的数目;
若不满足预设条件,则将当前次查询优化操作得到的行数提示和上一次查询优化操作所基于的行数提示合并,并将合并后的行数提示和目标解析树作为下一次查询优化操作的查询输入信息。
在一些可能的实施方式中,每个查询优化操作得到的访问路径提示包括:查询语句所要查询的各目标表的连接顺序提示;
预设条件包括第一条件,第一条件包括:
当前次查询优化操作和上一次查询优化操作得到访问路径提示的连接顺序提示相同,或者,当前次查询优化操作和上一次查询优化操作得到的行数提示相同,或者,查询优化操作的执行次数达到第一设定值。
在一些可能的实施方式中,预设条件还包括第二条件,第二条件包括:查询优化操作的执行次数不小于第二设定值,其中,第二设定值小于第一设定值;
对应每次查询优化操作,在满足第一条件但不满足第二条件时,装置还包括第二生成模块,用于:
基于预设的查询提示生成策略,生成种子查询提示;
其中,下一次查询优化操作的查询输入信息还包括种子查询提示。
在一些可能的实施方式中,查询提示信息还包括查询操作的执行时间;
查询模块在基于满足预设条件时已获取到的访问路径提示,确定查询语句对应的目标访问路径提示时,具体用于以下任一项:
将最后一次查询优化操作得到的访问路径提示,作为目标访问路径提示;
根据各次查询优化操作对应的执行时间,将执行时间最短的查询优化操作得到的访问路径提示,作为目标访问路径提示。
在一些可能的实施方式中,目标解析树对应至少一个查询块,装置还包括第一确定模块,用于:
对于每个查询块,确定查询块所涉及的各个目标表在目标解析树中的位置;
对于每个目标表,根据目标表在目标解析树中位置,确定每个目标表的表标识;
优化模块在基于查询输入信息执行查询操作,得到查询提示信息时,具体用于:
基于查询输入信息和确定出的各个目标表的表标识,生成查询语句对应的查询计划;
基于查询计划和目标解析树执行查询操作,得到查询提示信息。
在一些可能的实施方式中,优化模块在基于查询计划和目标解析树执行查询操作,得到查询提示信息时,具体用于:
基于目标解析树和查询计划,生成查询语句对应的执行结构,其中,执行结构中包括第一指示信息,第一指示信息指示了在执行查询操作的过程中扫描目标表时,被扫描的目标表所属的目标查询块、以及目标表在目标查询块的查询范围表中的位置;
按照执行结构执行查询操作,生成查询提示信息,查询提示信息中的访问路径提示包括:基于第一指示信息得到的每个查询块所涉及的各个目标表的扫描方式提示。
在一些可能的实施方式中,对于每个查询块,目标解析树和执行结构中包括各个查询块所涉及的每个目标表的表结构体,其中,表结构体中包括第一成员变量,第一成员变量指示了:表结构体对应的目标表所属的目标查询块的标识、以及表结构体对应的目标表在目标查询块的查询范围表中的位置;
其中,第一指示信息包括各个表结构体中的第一成员变量。
在一些可能的实施方式中,执行结构中还包括第二指示信息,第二指示信息指示了每个查询块所对应的父查询块、以及具有父子关系的查询块中子查询块所涉及的目标表与父查询块所涉及的目标表之间的对应关系;
查询提示信息中的访问路径提示还包括至少一条连接方式提示,每条连接方式提示用于提示至少两个目标表的连接方式;
对于每条连接方式提示,若连接方式提示对应的至少两个目标表中包括具有至少两个层级的查询块的目标表,装置还包括第一更新模块,用于:
对于连接方式提示对应的每个第一表,根据第二指示信息,确定第一表所对应的第二表,其中,第一表是至少两个层级的查询块的目标表中除最高层级的查询块的目标表之外的目标表,第一表对应的第二表是最高层级的查询块的目标表中第一表对应的目标表;
根据每个第一表对应的第二表,将连接方式提示更新为最高层级的查询块的至少两个目标表之间的连接方式提示。
在一些可能的实施方式中,对于每个查询块,目标解析树和执行结构中包括各个查询块所涉及的每个目标表的表结构体,其中,表结构体中包括第二成员变量,第二成员变量指示了:表结构体对应的目标表所属的目标查询块的父查询块的标识、以及表结构体对应的目标表的父关联表的位置,其中,父关联表是指表结构体对应的目标表在父查询块的目标表中所对应的目标表,父关联表的位置是指父关联表在父查询块的查询范围表中的位置;
其中,第二指示信息包括各个表结构体中的第二成员变量。
在一些可能的实施方式中,每次查询优化操作得到的访问路径提示中还包括至少一条连接顺序提示,每条连接顺序提示提示了至少两个目标表的连接顺序;
对于每条连接顺序提示,若连接顺序提示对应的至少两个目标表中包括具有至少两个层级的查询块的目标表,装置还包括第二更新模块,用于:
对于连接顺序提示对应的每个第一表,根据第二指示信息,确定第一表对应的第二表;
根据每个第一表对应的第二表,将连接顺序提示更新为至少两个层级中最高层级的查询块的至少两个目标表之间的连接顺序提示;
若具有至少两个层级的查询块的目标表中包括同一子查询块的至少两个目标表,根据连接顺序提示中同一子查询块的至少两个目标表的连接顺序,生成同一子查询块的连接顺序提示;
查询提示信息中的访问路径提示还包括同一子查询块的连接顺序提示。
在一些可能的实施方式中,第一生成模块在基于查询语句,生成查询语句的目标解析树时,具体用于:
基于查询语句,在访问路径提示数据库中进行查询,其中,访问路径提示数据库中存储有至少一个查询语句对应的访问路径提示;
若在访问路径提示数据库中未查询到查询语句对应的访问路径提示,则基于查询语句生成查询语句的目标解析树;
若访问路径提示数据库中查询到查询语句对应的访问路径提示,装置还包括第二确定模块,用于:
将查询到的访问路径提示确定为查询语句对应的目标访问路径提示;
若在访问路径提示数据库中未查询到查询语句对应的访问路径提示,在确定出查询语句对应的目标访问路径提示之后,装置还包括存储模块,用于:
将查询语句的目标访问路径提示关联存储到访问路径提示数据库中。
在一些可能的实施方式中,查询语句是基于复杂语句判断条件确定出的复杂查询语句。
另一方面,本申请实施例还提供了一种电子设备,该电子设备包括存储器和处理器,存储器中存储有计算机程序,处理器执行该计算机程序以实现本申请任一可选实施例中提供的方法。
另一方面,本申请实施例还提供了一种计算机可读存储介质,该存储介质中存储有计算机程序,该计算机程序被处理器执行时实现本申请任一可选实施例中提供的方法。
另一方面,本申请实施例还提供了一种计算机程序产品,该计算机产品包括计算机程序,该计算机程序被处理器执行时实现本申请任一可选实施例中提供的方法。
本申请实施例提供的技术方案带来的有益效果如下:
通过自动迭代的方式进行查询优化操作,自动优化访问路径提示,从而实现数据库访问路径的不断优化,自动确定出查询语句对应的最优的数据库访问路径,可以有效提高查询效率,尤其是在进行复杂查询时效果更加明显。
进一步的,通过根据各个目标表在目标解析树中的唯一位置,来生成每一目标表唯一对应的表标识,再根据表标识获取查询提示信息,可以克服不同目标表或不同层级的目标表表名相同时导致的访问路径提示不能使用的问题。
进一步的,通过第一指示信息来指示查询计划生成时被扫描的目标表所属的目标查询块、以及目标表在所述目标查询块的查询范围表中的位置,可以解决在执行结构生成的时无法获知被扫描的目标表所属的目标查询块、以及目标表在所述目标查询块的查询范围表中的位置的问题。
进一步的,通过第二指示信息来指示每个所述查询块所对应的父查询块、以及具有父子关系的查询块中子查询块所涉及的目标表与父查询块所涉及的目标表之间的对应关系,可以解决多表访问的问题。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对本申请实施例描述中所需要使用的附图作简单地介绍。
图1为一个示例中提供的基于查询语句生成访问路径提示的方案的示意图;
图2为一个示例中提供的基于查询语句生成访问路径提示的方案的示意图;
图3为本申请实施例提供的数据查询方法的应用环境示意图;
图4为本申请实施例提供的一种数据查询方法的流程示意图;
图5为本申请一个示例中的查询语句的示意图;
图6示出了针对图5中的查询语句的多次查询优化操作对应的查询提示信息的示意图;
图7为本申请一个示例中目标查询树的结构示意图;
图8为本申请一个示例中的查询语句的结构示意图;
图9为本申请一个示例中重写后的查询语句的结构示意图;
图10为本申请一个示例中目标表的表标识示意图;
图11为本申请一个示例中针对目标表的扫描方式提示示意图;
图12为本申请一个示例中针对目标表的连接方式提示的示意图;
图13为本申请一个示例中针对目标表的扫描方式提示示意图;
图14为本申请一个示例中执行结构的示意图;
图15为图14中的执行结构与对应的查询块的结构示意图;
图16为本申请一个示例中的查询块的结构示意图;
图17为本申请一个示例中扫描方式提示的生成方案的示意图;
图18为本申请一个示例中路径查询提示的生成方案的示意图;
图19为本申请一个示例中查询块的结构示意图;
图20为本申请一个示例中生成连接顺序提示的方案的示意图;
图21为本申请一个示例中连接顺序提示的生成方案示意图;
图22为本申请一个示例中行数提示的生成方案示意图;
图23为本申请一个示例中数据查询方案的示意图;
图24为本申请的数据查询方法与现有技术查询方法的执行时间对比图;
图25为本申请实施例提供的一种数据查询装置的结构示意图;
图26为本申请实施例所适用的一种电子设备的结构示意图。
具体实施方式
下面结合本申请中的附图描述本申请的实施例。应理解,下面结合附图所阐述的实施方式,是用于解释本申请实施例的技术方案的示例性描述,对本申请实施例的技术方案不构成限制。
本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本申请实施例所使用的术语“包括”以及“包含”是指相应特征可以实现为所呈现的特征、信息、数据、步骤、操作、元件和/或组件,但不排除实现为本技术领域所支持其他特征、信息、数据、步骤、操作、元件、组件和/或它们的组合等。应该理解,当我们称一个元件被“连接”或“耦接”到另一元件时,该一个元件可以直接连接或耦接到另一元件,也可以指该一个元件和另一元件通过中间元件建立连接关系。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的术语“和/或”指示该术语所限定的项目中的至少一个,例如“A和/或B”可以实现为“A”,或者实现为“B”,或者实现为“A和B”。在描述多个(两个或两个以上)项目时,如果没有明确限定多个项目之间的关系,这多个项目之间可以是指多个项目中的一个、多个或者全部,例如,对于“参数A包括A1、A2、A3”的描述,可以实现为参数A包括A1或A2或A3,还可以实现为参数A包括参数A1、A2、A3这三项中的至少两项。
本申请实施例是针对现有数据查询存在的查询效率低问题,而提出来的一种数据查询方法,该方法通过自动迭代的方式自动优化实现数据库访问路径提示的不断优化,自动确定出查询语句对应的最优的数据库访问路径提示,可以有效提高查询效率,尤其是在进行复杂查询时效果更加明显。
可选的,本申请实施例提供的方法中涉及的数据查询可以是在数据库中进行数据查询;本申请实施例提供的方法中所涉及的数据处理可以基于云技术实现。例如,基于查询语句生成目标解析树可以采用云计算技术,获取到的目标访问路径提示可以采用云存储的方式进行存储。
其中,数据库(Database),简而言之可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据进行新增、查询、更新、删除等操作。所谓“数据库”是以一定方式储存在一起、能与多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合。
云计算(cloud computing)是一种计算模式,它将计算任务分布在大量计算机构成的资源池上,使各种应用系统能够根据需要获取计算力、存储空间和信息服务。提供资源的网络被称为“云”。“云”中的资源在使用者看来是可以无限扩展的,并且可以随时获取,按需使用,随时扩展,按使用付费。而云存储(cloud storage)是在云计算概念上延伸和发展出来的一个新的概念,分布式云存储系统(以下简称存储系统)是指通过集群应用、网格技术以及分布存储文件系统等功能,将网络中大量各种不同类型的存储设备(存储设备也称之为存储节点)通过应用软件或应用接口集合起来协同工作,共同对外提供数据存储和业务访问功能的一个存储系统。
下面通过对几个可选的实施例的描述,对本申请提供的技术方案以及本申请的技术方案产生的技术效果进行说明。需要指出的是,下述实施方式之间可以相互参考、借鉴或结合,对于不同实施方式中相同的术语、相似的特征以及相似的实施步骤等,不再重复描述。
目前通常是根据预设的规则信息对访问路径提示进行优化,但存在如下问题:
预设规则例如基于专家经验得到的规则本身有一定的局限性,没有办法覆盖所有的规则,对于某些系统没有很好的适应性;
所生成的路径难以表达,目前都是采用查询提示的方式进行表达,对于查询语句而言,其所涉及的目标表的别名(alias)有时并不能唯一表示一个数据库对象,会出现同名表的情况,这就导致在执行查询时,同名表没有办法通过提示(hint)来表达,在生成访问路径的时候无法进行指定,即无法获取到对应的查询提示信息。
如图1所示,查询语句“selectlineitem.1_orderkey from lineitem,(select1_orderkey from lineitem)as a”中出现了两个表名均为“lineitem”,一个为子查询,一个为父查询,但这两个表实际上为两个不同的表,或者对应不同层级的表,此时会出现无法正确表达同名表,执行查询计划时,产生的访问路径提示可能无法使用。
此外,无法对于Subquery(子查询)进行支持。子查询是一条查询语句的结果,作为另一条查询语句的一部分,是数据库查询中的常见谓词,由于子查询本身没有实体名称,没有办法表达,如图2所示,预期是表“order”和表“subquery”先进行计算,但目前的方式会导致表“subquery”最后进行计算,违背了使用者的初衷。
本申请实施例提供的数据查询方法,旨在解决如上所述的技术问题。
本申请实施例提供的数据查询方法,可以由任意的计算机设备执行,可选的,服务器执行,其中,服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云计算服务的云服务器。
本申请实施例提供的数据查询方法,可以应用于任何有数据查询需求的应用场景中,可以适用于对任意类型的数据库进行查询,可以包括但不限于分布式数据库、集中式数据库中。本申请的该方法,可以通过自动迭代的方式自动优化实现数据库访问路径提示的不断优化,自动确定出查询语句对应的最优的数据库访问路径提示,可以有效提高查询效率,尤其是在进行复杂查询时效果更加明显。
图3为本申请实施例提供的数据查询方法的应用环境示意图。其中,应用环境可以包括应用程序301和数据库服务器302。具体的,应用程序301发送查询语句到数据库服务器302中,数据库服务器302通过解析器基于所述查询语句生成所述查询语句的目标解析树;将所述目标解析树作为第一次查询优化操作的查询输入信息,基于查询优化器重复执行查询优化操作直至满足预设条件;基于满足所述预设条件时已获取到的访问路径提示,得到所述查询语句对应的目标访问路径提示,以基于所述目标访问路径提示进行查询,得到对应的查询结果,数据库服务器302将查询结果返回至应用程序。
上述实施例中是通过数据库服务器直接对查询语句进行处理,生成目标访问路径提示;在其他实施例中,可以是由终端中的插件、脚本等对查询语句进行处理,生成目标访问路径提示,再将目标访问路径提示发送至数据库服务器获取查询结果。
本技术领域技术人员可以理解,服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN(ContentDelivery Network,内容分发网络)、以及大数据和人工智能平台等基础云计算服务的云服务器或服务器集群。
终端(也可以称为用户终端或用户设备)可以是智能手机、平板电脑、笔记本电脑、台式计算机、智能语音交互设备(例如智能音箱)、可穿戴电子设备(例如智能手表)、车载终端、智能家电(例如智能电视)、AR/VR设备等,但并不局限于此。终端以及服务器可以通过有线或无线通信方式进行直接或间接地连接,本申请在此不做限制。
在一些可能的实施方式中,提供了一种数据查询方法,可以由数据库服务器执行,也可以是由用于获取目标访问路径提示的插件、应用程序、脚本等执行。
图4示出了本申请实施例提供的一种数据查询方法的流程示意图,该方法可以由数据库服务器执行,也可以是由于数据库服务器通信连接的任一计算机设备执行,该计算机设备通过执行本申请实施例提供的方法,可以获取到查询语句对应的目标访问路径提示,可以将该访问路径提示提供给数据库服务器,数据库服务器可以基于该提示进行查询语句的实际查询处理,得到对应的查询结果。如图4所示,以执行主体为数据库服务器为例,本申请提供的数据查询方法,可以包括如下步骤:
步骤S401,获取待处理的查询语句。
其中,查询语句的具体语句结构本申请实施例不做限定,对于不同的应用场景和数据库语言,查询语句的形式可能不同。可选的,查询语句可以包括基于SQL(StructuredQuery Language,结构化查询语言)的SQL查询语句。
对于查询语句的具体获取方式,本申请实施例不做限定。可选的,查询语句可以是从客户端直接获取到的,也可以客户端根据接收到的涉及数据查询需求的业务处理请求生成的,客户端在获取到该业务处理请求后,可以根据该请求生成对应的请求生成对应的查询语句,再按照通信协议,例如,按照mysql(关系型数据库管理系统)通信协议传输到数据库服务器,当然,也可以是客户端在获取业务处理请求之后,将该业务处理请求发送给数据库服务器,由数据库服务器生成该业务处理请求对应的查询语句。
步骤S402,基于查询语句生成查询语句的目标解析树。
可选的,在获取到查询语句之后,数据库服务器可以对查询语句进行解析,生成查询语句对应的初始的解析树(也可以称为查询树),还可以采用预设的语法规则等验证进一步检查生成的该解析树是否合法等,通过对原始的解析树进行修改,得到修改后的解析树。其中,目标解析树为修改后的解析树。
步骤S403,将目标解析树作为第一次查询优化操作的查询输入信息,重复执行查询优化操作直至满足预设条件。
其中,查询优化操作可以包括:
(1)基于查询输入信息执行查询操作,得到查询提示信息;
(2)若不满足预设条件,则将当前次查询优化操作得到的行数提示和上一次查询优化操作所基于的行数提示合并,并将合并后的行数提示和目标解析树作为下一次查询优化操作的查询输入信息。
其中,查询提示信息包括访问路径提示和行数提示,行数提示提示了查询到的目标数据的数目。
其中,行数提示可以用于下一次查询优化操作,因此也可称为行数校正提示。
具体的,可以通过查询分析工具,执行查询操作,例如,通过explain analyze(一种查询分析工具),可以得到查询的实际执行时间、访问路径提示和行数提示。
其中,访问路径提示指示了在执行查询操作的过程中,对于数据库进行访问时的具体访问方式,访问路径提示可以包括但不限于扫描方式提示、连接方式提示以及连接顺序提示中的一项或多项,其中,扫描方式提示指示了查询语句所涉及的目标表(也就是需要查询的表)的扫描方式,连接方式提示指示了查询语句所涉及的目标表之间的连接方式,比如,是哈希连接还是其他连接,连接顺序提示则指示了查询语句所涉及的数据表之间的连接顺序,即将目标表连接时,哪个表在前哪个表在后。
上述查询优化操作结束的预设条件,可以根据实际需求配置,可选的,是否满足预设条件可以是基于当前次查询优化操作和上一次查询优化操作得到的访问路径提示或行数提示中的至少一项所确定的,也可以是根据查询优化操作的执行次数所确定的,具体针对预设条件将在下文进行进一步详细说明。
在具体实施过程中,第一次查询优化操作中,将目标解析树作为查询输入信息,得到第一次查询优化操作得到的访问路径提示和行数提示;若不满足预设条件,则进行第二次查询优化操作;第二次查询优化操作中,将第一次查询优化操作得到的行数提示此次查询的查询辅助信息,即将第一次查询优化操作得到的行数提示和目标解析树作为查询输入信息,得到第二次查询优化操作得到的访问路径提示和行数提示;若不满足预设条件,则进行第三次查询优化操作;第三次查询优化操作中,将第二次查询优化操作得到的行数提示带入第二次查询优化操作的查询输入信息中,即将第二次查询优化操作得到的行数提示和第二次查询优化操作所基于的行数提示合并,也就是将第二次查询优化操作得到的行数提示和第一次查询优化操作所得到的行数提示合并,将合并后的行数提示与目标解析树作为第四次查询优化操作的查询输入信息,如此循环重复查询优化操作,直至满足预设条件。
作为一个示例,图5为一个示例中的查询语句的示意图,以及示出了表名和表标识的对应关系,图中“select……fromsupplier,lineiteml1,orders,nation”表示从表“supplier”、“lineiteml1”、“orders”和“nation”中查询数据;图中表“supplier”对应的表标识“1.1”,表“lineiteml1”对应的表标识为“1.2”等。
图6示出了针对图5中的查询语句的多次查询优化操作对应的查询提示信息的示意图,如图6所示,第一次查询优化操作中,将目标解析树作为查询输入信息,得到图中所示中的执行时间、访问路径提示和行数提示;图中“executiontime”为执行时间;图中600中包括第一次查询优化操作得到的访问路径提示,1.1至1.6为查询语句涉及的各个目标表的表标识,SEQSCAN()表示全表扫描得到的扫描方式提示,例如SEQSCAN(“1.4”)表示将表标识为1.4对应的目标表从头到尾顺序读一遍;HASHJOIN(1.2 1.6)表示这1.2和1.6这两个的连接方式是哈希连接,LEADING一行对应的是连接顺序提示。图中601中包括第一次查询优化操作得到的行数提示,例如ROWS(1.2 1.6#337680)表示目标表1.2和1.6查询到的目标数据的数目为337680。第二次查询优化操作中,将图中所示601中的行数提示带入目标解析树作为查询输入信息,得到图中602中的行数提示;第三次查询优化操作中,将图中所示的602中的行数提示和601中的行数提示合并,得到图中所示的603中的行数提示;将603中的行数提示带入目标解析树作为查询输入信息,得到图中所示604中的行数提示;第四次查询优化操作中,将图中所示的603中的行数提示和604中的行数提示合并,得到图中所示的605中的行数提示。
步骤S204,基于满足预设条件时已获取到的访问路径提示,得到查询语句对应的目标访问路径提示,以基于目标访问路径提示进行查询,得到对应的查询结果。
其中,已获取到的访问路径提示可以包括满足预设条件时已经执行的每一次查询优化操作所得到的访问路径提示。
具体的,目标访问路径提示可以包括满足预设条件时最后一次查询优化操作得到的访问路径提示,或根据执行时间所确定,具体确定目标访问路径提示的过程将在下文进行进一步详细阐述。
具体的,可以是数据库服务器执行上述的获取查询语句、生成目标解析树、执行查询优化操作、获取目标访问路径提示的步骤,并执行基于目标访问路径提示进行查询,得到对应的查询结果;也可以通过插件、脚本等其他执行主体来执行上述的获取查询语句、生成目标解析树、执行查询优化操作、获取目标访问路径提示的步骤,将目标访问路径发送至数据库服务器,数据库服务器再基于目标访问路径提示进行查询,得到对应的查询结果。
上述实施例中,通过自动迭代的方式进行查询优化操作,自动优化访问路径提示,从而实现数据库访问路径的不断优化,自动确定出查询语句对应的最优的数据库访问路径,可以有效提高查询效率,尤其是在进行复杂查询时效果更加明显。
以下将结合实施例对预设条件进行进一步详细说明。
在一些可能的实施方式中,每个查询优化操作得到的访问路径提示包括:查询语句所要查询的各目标表的连接顺序提示;
预设条件包括第一条件,第一条件可以包括:
当前次查询优化操作和上一次查询优化操作得到访问路径提示的连接顺序提示相同。
具体的,每执行一次查询优化操作,可以将当次查询优化操作对应的各目标表的连接顺序与上一次查询优化操作对应的各目标表的连接顺序进行比较,即当次查询优化操作和上一次查询优化操作的连接顺序提示进行比较,若两次连接顺序提示相同,说明迭代中不再产生新的连接顺序,即所收集的实际执行的行数提示均已产生,也就是不再需要产生新的行数提示,则满足第一条件,即满足预设条件。
若当次查询优化操作和上一次查询优化操作的连接顺序提示不同,则重复将当前次查询优化操作得到的行数提示和上一次查询优化操作所基于的行数提示合并,并将合并后的行数提示和目标解析树作为下一次查询优化操作的查询输入信息的操作,直至满足预设条件。
在一些可能的实施方式中,第一条件还可以包括:
当前次查询优化操作和上一次查询优化操作得到的行数提示相同。
具体的,若当前次查询优化操作和上一次查询优化操作得到的行数提示相同,说明迭代中不再产生新的行数提示,即所收集的实际执行的行数提示均已产生,则满足第一条件,即满足预设条件。
在一些可能的实施方式中,第一条件还可以包括:
查询优化操作的执行次数达到第一设定值。
具体的,可以设置第一设定值,当迭代次数也就是执行次数达到第一设定值,即不再进行查询优化操作。
在一些可能的实施方式中,预设条件还可以包括第二条件;第二条件包括:查询优化操作的执行次数不小于第二设定值,其中,第二设定值小于第一设定值。
对应每次查询优化操作,在满足第一条件但不满足第二条件时,方法还包括:
基于预设的查询提示生成策略,生成种子查询提示;
其中,下一次查询优化操作的查询输入信息还包括种子查询提示。
其中,第二设定值可以理解为满足预设条件必须迭代的最小次数,若满足预设条件时的查询优化操作的次数小于第二设定值,说明查询优化操作的迭代过程收敛太快,但此时已经出现当前次查询优化操作和上一次查询优化操作得到访问路径提示的连接顺序提示相同,或者当前次查询优化操作和上一次查询优化操作得到的行数提示相同,则需要改变下一次查询优化操作的查询输入信息。
具体的,可以在下一次查询优化操作的查询输入信息中带入其他信息,即基于预设的查询提示生成策略,生成种子查询提示,将种子查询提示添加到下一次查询优化操作的查询输入信息,再次重复查询优化操作,直至满足预设条件,且查询优化操作的次数大于或等于第二设定值。
上述实施例中,满足第一条件或第二条件中的至少一种则为满足预设条件。
上述实施例阐述了预设条件,以下将结合实施例进一步阐述从已获取到的访问路径提示中确定目标访问路径提示的具体过程。
在一些可能的实施方式中,基于满足预设条件时已获取到的访问路径提示,确定查询语句对应的目标访问路径提示,可以包括:
将最后一次查询优化操作得到的访问路径提示,作为目标访问路径提示。
具体的,若满足预设条件,可以将最后一次查询优化操作得到的访问路径提示设为最优的访问路径提示,即最后一次查询优化操作得到的访问路径提示作为目标访问路径提示。
在一些可能的实施方式中,查询提示信息还包括查询操作的执行时间。
基于满足预设条件时已获取到的访问路径提示,确定查询语句对应的目标访问路径提示,可以包括:
根据各次查询优化操作对应的执行时间,将执行时间最短的查询优化操作得到的访问路径提示,作为目标访问路径提示。
其中,执行时间即查询操作所消耗的用时。
具体的,执行时间更短,说明对应的查询效率更高,即对应的访问路径提示相对更优化。
具体的,可以比较各次查询优化操作对应的执行时间,执行时间最短的查询优化操作对应的查询效率最高,即访问路径提示相对是最优化的,可以将执行时间最短的查询优化操作得到的访问路径提示,作为目标访问路径提示。
上述实施例阐述了确定目标访问路径提示的具体过程,以下将结合具体实施方式进一步阐述通过定义目标表在解析树位置的方式来区别同名表的过程。
在一些可能的实施方式中,目标解析树对应至少一个查询块,在生成查询语句的目标解析树之后,方法还包括:
(1)对于每个查询块,确定查询块所涉及的各个目标表在目标解析树中的位置;
(2)对于每个目标表,根据目标表在目标解析树中位置,确定每个目标表的表标识。
基于查询输入信息执行查询操作,得到查询提示信息,可以包括:
基于查询输入信息和确定出的各个目标表的表标识,生成查询语句对应的查询计划;
基于查询计划和目标解析树执行查询操作,得到查询提示信息。
具体的,对于查询语句而言,其所涉及的目标表的别名有时并不能唯一表示一个数据库对象,会出现同名表的情况,这就导致在执行查询时,同名表没有办法通过提示来表达,在生成访问路径的时候无法进行指定,即无法获取到对应的查询提示信息。为了解决该问题,本申请实施例提供的该方案,根据目标表在目标解析树中的位置来确定目标表的表标识,因为目标表在目标解析树中的位置是唯一的,也就是目标表在目标解析树中对应的节点是唯一的,即每一目标表对应有唯一的一个表标识,从而确定唯一的数据库对象。
具体的,获取到目标表的唯一表标识后,再根据查询输入信息和表标识,生成查询计划并执行。
以下将结合示例对上述生成表标识、并基于表标识获取查询提示消息的具体过程进行详细说明。
在一个示例中,数据库服务器获取查询语句对应的初始查询树,对初始查询树进行逻辑优化,即对初始查询树进行等价变换,将其重写成新的查询树,即得到目标查询树。
如图7所示,图7为一个示例中目标查询树的结构示意图。
其中关键数据结构解释如下:
PlannerInfo:访问路径计算阶段,每个查询块包含一个PlannerInfo,用来表示本查询块访问路径的相关信息;
PlannerGlobal:每个查询包含一个PlannerGlobal用来保存查询级别的访问信息,PlannerGlobal结构体,是查询优化的上下文信息,用于记录做计划期间的全局信息;
Query:每个查询块包含一个Query,对初始查询树进行等价变换得到目标查询树的过程中,多个Query有可能会合并;
FromExp-SQL:语句涉及的表的连接关系及约束关系;
*rtable:在查询中from子句后面会指出需要进行查询的范围表,可能是对单个范围表进行查询,也可能是对几个范围表做连接操作,rtable中则记录了这些范围表。
*jointree:rtable中列出了查询语句中的表,但没有明确指出各个表之间的连接关系,这个连接的关系则通过jointree来标明;
RangeTblEntry:范围表,简称RTE,描述了查询中出现的表,它通常出现在查询语句的FROM子句中,范围表中既有常规意义上的堆表,还有子查询、连接表等;一个RangeTblEntry表示一个表对象;RangeTblEntry根据成员变量rtekind来确定自己的类型,类型不同RangeTblEntry成员变量的作用也不同;
Alias:别名;
JoinPath:用于表示查询块的访问路径;
Path:访问路径中的一个节点;
RelOptInfo:表示一个访问节点的信息;relids:表示这个表在查询语句中的位置;
FromExpr:\FromExpr和JoinExpr是用来表示表之间的连接关系的结构体,通常来说,FromExpr中的各个表之间的连接关系是InnerJoin;
将初始查询树进行等价变换得到目标查询树,主要可能发生如下变化:
多个不同的查询块可能合并成一个查询块,直观反应就是Query结果变少,相应的PlannerInfo也会变少;
多个Query结构的RangeTblEntry链表可能会合并;如图8所示,图8为一个示例中的查询语句的结构示意图,图8中包含同名表“lineitem”,由于子查询为简单查询,在重写后子查询会进行合并。
如图9所示,图9为一个示例中重写后的查询语句的结构示意图;合并后的查询块的结构中,子查询合并到父查询块,子查询中的lineitem变为lineitem_1。
对于每个目标表,根据目标表在目标解析树中位置,确定每个目标表的表标识,如图10所示,图10为一个示例中目标表的表标识示意图;例如表名“lineitem”的表标识为“1.1”,表名“a”的表标识为“1.2”,表名“customer”的表标识为“1.3”,表名“lineitem_1”的表标识为“1.5”。
如图11所示,图11为一个示例中针对目标表的扫描方式提示示意图;图中的scanhint表示扫描方式提示,SEQSCAN表示全表扫描,即将该表所有数据块从头到尾顺序读一遍,例如SEQSCAN(1.1)表示将表标识为1.1对应的目标表从头到尾顺序读一遍。
如图12所示,图12为一个示例中针对目标表的连接方式提示的示意图;图中joinhint表示链接提示,HASHJOIN表示哈希连接,例如图中的HASHJOIN(1.3 1.4)表示将表标识为“1.3”和表标识为“1.4”分别对应的目标表进行哈希连接。
在扫描方式提示中,表标识的形式不作具体限定,可以是数字、编号,也可以是字母作为表标识。
例如,数字.数字表示(plannerinfo_seq_no.rtable_list_no),即(plannerinfo标识.rtable_list标识);数字.表别名(表alias)表示(plannerinfo_seq_no.table_alias),即(plannerinfo标识.rtable表名);表alias表示(1.table_alias),即(1.表名);数字表示(1.rtable_list_no),即(1.rtable_list标识);
如图13所示,图13为一个示例中针对目标表的扫描方式提示示意图;图中SEQSCAN(1.1)可以表示扫描plannerinfo标识为1rtable_list标识为1的目标表;SEQSCAN(1.customer)表示扫描plannerinfo标识为1表名为customer的目标表;SEQSCAN(orders)表示扫描表名为orders的目标表,也等同于SEQSCAN(1.orders),SEQSCAN(5)表示SEQSCAN(1.5),即扫描plannerinfo标识为1rtable_list标识为5的目标表。
上述实施例中,通过根据各个目标表在目标解析树中的唯一位置,来生成每一目标表唯一对应的表标识,再根据表标识获取查询提示信息,可以克服不同目标表或不同层级的目标表表名相同时导致的访问路径提示不能使用的问题。
上述实施例阐述了根据各个目标表在目标解析树中的位置生成表标识的过程,以下将结合实施例进一步阐述根据查询计划生成查询提示信息的具体过程。
在一些可能的实施方式中,基于查询计划和目标解析树执行查询操作,得到查询提示信息,可以包括:
(1)基于目标解析树和查询计划,生成查询语句对应的执行结构。
其中,执行结构中包括第一指示信息,第一指示信息指示了在执行查询操作的过程中扫描目标表时,被扫描的目标表所属的目标查询块、以及目标表在目标查询块的查询范围表中的位置。
(2)按照执行结构执行查询操作,生成查询提示信息。
其中,查询提示信息中的访问路径提示包括:基于第一指示信息得到的每个查询块所涉及的各个目标表的扫描方式提示。
具体的,在执行结构生成的时候,将所有的查询块拉平,在执行结构中无法完全还原查询计划生成时的结构,即已经无法获知被扫描的目标表所属的目标查询块、以及目标表在目标查询块的查询范围表中的位置,因此可以采用第一指示信息来进行指示。
以下将结合示例进行进一步说明。
如图14所示,图14为一个示例中执行结构的示意图。
图中所示的关键数据结构如下:
QueryDesc:执行结构的起始数据结构:查询描述符,实际是需要执行的SQL语句的相关信息;
PlanState:表示执行步骤的一个节点;
Plan:包含实际的执行方法;
PlannedStmt:是其中一个字段,其中rtable包含执行所需要的RangeTblEntry。
执行结构实际为一颗二叉树,执行器通过先序遍历,即先根后左再右的顺序不断执行执行节点。
如图15所示,图15为图14中的执行结构与对应的查询块的结构示意图。图15中可以看出,由于执行结构生成的时候,将所有的查询块拉平,因此在执行结构中已经无法完全还原查询计划生成时的结构。
可以对图中所示的RangeTblEntry(QB1)和RangeTblEntry(QB2)添加第一指示信息来表示查询计划生成阶段的信息。
如图16所示,图16为一个示例中的查询块的结构示意图;图中的1600即为添加的第一提示信息,包括图中所示的plannerinfo_seq_no,表示在查询计划生成阶段的plannerinfo_seq_no信息,即被扫描的目标表所属的目标查询块;还包括rte_array_id,表示查询计划生成阶段在rtable的位置,即目标表在目标查询块的查询范围表中的位置。
对于每个查询块,目标解析树和执行结构中包括各个查询块所涉及的每个目标表的表结构体,其中,表结构体中包括第一成员变量,第一成员变量指示了:表结构体对应的目标表所属的目标查询块的标识、以及表结构体对应的目标表在目标查询块的查询范围表中的位置;
其中,第一指示信息包括各个表结构体中的第一成员变量。
如图16所示,图中1601为查询块的表结构体中的第一成员变量,也属于第一指示信息,即第一指示信息在查询块的表结构体中和执行结构中是复用的。
根据上述执行结构可以生成扫描方式提示,如图17所示,图17为一个示例中扫描方式提示的生成方案的示意图。图中包括准备生成查询提示的查询语句,还包括表标识“tablesequence”,以及生成的路径查询提示,包括行数提示(rows_hint)、扫描方式提示(scanhint)、连接方式提示(join_hint)和连接顺序提示(leadhint)。图中下方左边的扫描方式提示为原始的扫描方式提示,右边的扫描方式提示为针对目标表生成表标识之后得到的扫描方式提示。例如图中目标表“lineitem”编号为1.3对应的SEQSCAN(lineitem)表示为SEQSCAN(1.1)。
上述实施例中,通过第一指示信息来指示查询计划生成时被扫描的目标表所属的目标查询块、以及目标表在目标查询块的查询范围表中的位置,可以解决在执行结构生成的时无法获知被扫描的目标表所属的目标查询块、以及目标表在目标查询块的查询范围表中的位置的问题。
上述实施例中,利用第一指示信息可以解决单表访问的问题,但是对于包含至少两个查询块的查询仍然是无法解决,如图18所示,图18为一个示例中路径查询提示的生成方案的示意图;图18中的查询语句、表标识、生成的路径查询提示与图17中相同。图中“lineitem_1”以及表“orders_1”属于plannerinfo 2,但是生成的查询提示与父查询块的表“customer orders lineitem”,混合在一起,无法正确应用。
为了解决上述技术问题,在一些可能的实施方式中,执行结构中还包括第二指示信息,其中,第二指示信息指示了每个查询块所对应的父查询块、以及具有父子关系的查询块中子查询块所涉及的目标表与父查询块所涉及的目标表之间的对应关系。
查询提示信息中的访问路径提示还包括至少一条连接方式提示,每条连接方式提示用于提示至少两个目标表的连接方式;
对于每条连接方式提示,若连接方式提示对应的至少两个目标表中包括具有至少两个层级的查询块的目标表,方法还包括:
对于连接方式提示对应的每个第一表,根据第二指示信息,确定第一表所对应的第二表,其中,第一表是至少两个层级的查询块的目标表中除最高层级的查询块的目标表之外的目标表,第一表对应的第二表是最高层级的查询块的目标表中第一表对应的目标表;
根据每个第一表对应的第二表,将连接方式提示更新为最高层级的查询块的至少两个目标表之间的连接方式提示。
具体的,第二指示信息可以用于标识子查询中的表所属的父查询块。
如图19所示,图19为一个示例中查询块的结构示意图。在图19中,在RangeTblEntry中增加了两个变量parent_plannerinfo_seq_no以及parent_rte_array_id,即图中所示的1900,用来表示子查询块的表对应的父查询块的表,如下所示表2.1以及表2.2对应的父查询块的表为1.2。
在一些可能的实施方式中,对于每个查询块,目标解析树和执行结构中包括各个查询块所涉及的每个目标表的表结构体,其中,表结构体中包括第二成员变量,第二成员变量指示了:表结构体对应的目标表所属的目标查询块的父查询块的标识、以及表结构体对应的目标表的父关联表的位置,其中,父关联表是指表结构体对应的目标表在父查询块的目标表中所对应的目标表,父关联表的位置是指父关联表在父查询块的查询范围表中的位置;
其中,第二指示信息包括各个表结构体中的第二成员变量。
如图19所示,图中1901为查询块的表结构体中的第二成员变量,也属于第二指示信息,即第二指示信息在查询块的表结构体中和执行结构中是复用的。
上述实施例中,通过第二指示信息来指示每个查询块所对应的父查询块、以及具有父子关系的查询块中子查询块所涉及的目标表与父查询块所涉及的目标表之间的对应关系,可以解决多表访问的问题。
在一些可能的实施方式中,每次查询优化操作得到的访问路径提示中还包括至少一条连接顺序提示,每条连接顺序提示提示了至少两个目标表的连接顺序;
对于每条连接顺序提示,若连接顺序提示对应的至少两个目标表中包括具有至少两个层级的查询块的目标表,方法还包括:
对于连接顺序提示对应的每个第一表,根据第二指示信息,确定第一表对应的第二表;
根据每个第一表对应的第二表,将连接顺序提示更新为至少两个层级中最高层级的查询块的至少两个目标表之间的连接顺序提示;
若具有至少两个层级的查询块的目标表中包括同一子查询块的至少两个目标表,根据连接顺序提示中同一子查询块的至少两个目标表的连接顺序,生成同一子查询块的连接顺序提示;
查询提示信息中的访问路径提示还包括同一子查询块的连接顺序提示。
其中,第一表可以是具有至少两个层级的查询块中子查询块对应的目标表,则第二表可以是与子查询块对应的父查询块所涉及的目标表。
具体的,可以根据第二指示信息中具有父子关系的查询块中子查询块所涉及的目标表与父查询块所涉及的目标表之间的对应关系,确定第一表对应的第二表。
对于连接方式提示,如果发现子查询块的表,即第一表,需要将对应的父查询块的表进行翻译,逐层寻找,直到找到匹配当前查询的父查询块的表,即第二表。
如图20所示,图20为一个示例中生成连接顺序提示的方案的示意图。图中还包括表名和表标识的对应关系,即“tablesequence”,根据表名的连接顺序提示为HASHJOIN(lineitemlineitem_1lineetem_2),根据表标识所确定的连接顺序提示为HASHJOIN(1.12.1 3.1),表lineitem_1以及lineitem_2对应的表标识分别为2.1以及3.1,对应的父查询块的表标识分别为1.2以及1.3,因此连接方法表对应为HASHJOIN(1.1 1.2 1.3)。
对于连接顺序提示相比于连接方式提示,除了要解析出相应的父查询块所对应的目标表之外,还要生成子查询块的连接顺序提示。
如图21所示,图21为一个示例中连接顺序提示的生成方案示意图,表lineitem_1以及orders_1对应的编号分别为2.1以及2.2,对应的父查询块的表均为1.4。除了生成plannerinfo 1的连接顺序HintLEADING(((1.3(1.2 1.4))1.1))外,还要生成plannerinfo2的连接顺序LEADING((2.1 2.2))。
执行过程中,数据库服务器需要记录每次连接所生成的行数,对于不同查询块只能将相同查询块合并在一起。
如图22所示,图22为一个示例中行数提示的生成方案示意图;对于某一个连接行数的表达,需要将下面所有的表都包含进去。如表达最顶层的哈希连接结果,需要包含1.1,1.2,1.3,1.4即customer,orders,lineitem,以及subquery。
不同查询块对应的目标表同时出现,需要将下层映射成相同查询块对应的目标表。比如orders和subquery进行join,需要将表2.1,2.2映射成1.4,即表示1.2,2.1,2.2表示成1.2,1.4可以正确表达。
对于行数提示,生成方法类似于连接顺序提示,特别的是需要对于行数提示需要进行验证。
在一些可能的实施方式中,步骤S402基于查询语句,生成查询语句的目标解析树,可以包括:
(1)基于查询语句,在访问路径提示数据库中进行查询;
(2)若在访问路径提示数据库中未查询到查询语句对应的访问路径提示,则基于查询语句生成查询语句的目标解析树。
其中,访问路径提示数据库中存储有至少一个查询语句对应的访问路径提示。
具体的,若在访问路径提示数据库中未查询到查询语句对应的访问路径提示,则说明需要根据目标解析树获取目标访问路径提示,则先根据查询语句生成目标解析树。
若访问路径提示数据库中查询到查询语句对应的访问路径提示,方法还包括:
将查询到的访问路径提示确定为查询语句对应的目标访问路径提示。
具体的,若访问路径提示数据库中查询到了对应的查询语句,可以不用再实时生成与查询语句对应的访问路径提示,直接使用查询到的访问路径提示,可以有效节省获取访问路径提示的时间,提高查询效率。
若在访问路径提示数据库中未查询到查询语句对应的访问路径提示,在确定出查询语句对应的目标访问路径提示之后,方法还包括:
将查询语句的目标访问路径提示关联存储到访问路径提示数据库中。
具体的,若未查询到查询语句对应的访问路径提示,则生成目标解析树,并根据目标解析树获取目标访问路径提示,将目标访问路径提示关联存储到访问路径提示数据库中,可以便于再次根据查询语句进行查询时,直接查询到对应的访问路径提示,提高查询效率。
在一些可能的实施方式中,查询语句是基于复杂语句判断条件确定出的复杂查询语句。
其中,复杂语句判断条件可以是预先设置的,例如,查询语句中涉及同名表,查询语句中包括至少一个子查询等。
以下将结合附图和示例对本申请的数据查询方法进行进一步阐述。
如图23所示,在一个示例中,本申请的数据查询方法,可以包括如下步骤:
读入需要优化的查询语句:在创建调优任务中输入需要优化的查询语句,所输入的查询语句需要可以进行explain analyze进行性能分析。其中执行explain analyze可以得到查询语句的实际执行时间,以及对应执行算子的实际返回的数据的条数,即查询的实际执行时间、访问路径提示和行数提示;
启动自动优化脚本:自动优化脚本读入并启动自动优化流程,即重复执行查询优化操作直至满足预设条件。每次执行查询优化操作会得到查询的相应信息,包括执行时间,访问路径提示,以及执行过程中返回行数提示。
生成访问路径提示以及行校正提示:使用explain analyze执行查询语句,并获取相应的信息包括执行时间,访问路径提示以及行数提示。
应用行校正提示:利用所得到的实际运行的结果,即执行时间、访问路径提示以及行数提示,应用到所需要优化的查询语句中,对已有的估计信息进行修正。数据库优化器会根据修正后的信息重新估算访问路径提示。
检查并重新应用提示:首先判断是否产生新的连接顺序,如果产生新的连接顺序,则表示产生了新的行校正提示,则将新产生行校正提示与目前的行校正提示进行合并产生新的行校正提示的集合并重复步骤“启动自动优化脚本”、“生成访问路径提示以及行校正提示”和“应用行校正提示”;如果没有新的连接顺序产生,说明没有新的行校正提示产生,则生成调优报告。可以指定循环的最大次数,来决定调整的深度,目前默认是5。
生成调优报告:调优工具会记录所执行最优路径的访问路径提示,行校正提示以及执行时间。用户可以使用访问路径提示来对所执行的查询语句的访问路径进行指定。
其中,查询优化操作包括:每次生成新的新的行数,带入下一次执行然后合并所生成行数提示,反复迭代。具体包括:
执行explain analyze得到第一组执行时间、第一组访问路径提示以及第一组行数提示;其中,得到的行数提示的数值为实际执行过程中所获得的实际的行数,为实际值;
利用生成的第一组行数提示再次执行explain analyze,并得到相应信息,即第二组执行时间、第二组访问路径提示以及第二组行数提示;
需要比较第一组以及第二组的连接顺序是否一致。如果一致,说明迭代中不再产生新的连接顺序,所收集的实际执行的行数提示均已产生,则可以确定最终的访问路径提示;若生成连接顺序与已经产生的顺序不一致,则执行相关提示的合并动作,即将第一组行数提示和第二组行数提示进行合并,得到第三组行数提示;
利用第三组行数提示执行explain analyze并生成第四组行数提示,将第四组行数提示带入查询语句,重新执行explain analyze语句并带上第三图行数提示,如此往复的重复这些步骤,直到没有新的访问路径产生。
其中每次执行,explain analyze工具会记录查询实际的执行时间,选取执行时间最小的访问路径提示,并作为最终的访问路径,通常来讲我们会记录执行时间最短的访问路径提示,来保证访问路径的稳定性。
以下将结合实验数据对本申请的数据查询方法的有益效果进行进一步说明。
如图24所示,图24为本申请的数据查询方法与现有技术查询方法的执行时间对比图。针对不同的查询语句1、查询语句2和查询语句3,采用现有技术,即图中的“before”所对应的执行时间,明显要大于采用本申请的数据查询方法所对应的执行时间。
由此可见,本申请的数据查询方法,可以有效提高数据查询效率,减少数据查询耗时。
本申请的数据查询方法,通过自动迭代的方式进行查询优化操作,自动优化访问路径提示,从而实现数据库访问路径的不断优化,自动确定出查询语句对应的最优的数据库访问路径,可以有效提高查询效率,尤其是在进行复杂查询时效果更加明显。
进一步的,通过根据各个目标表在目标解析树中的唯一位置,来生成每一目标表唯一对应的表标识,再根据表标识获取查询提示信息,可以克服不同目标表或不同层级的目标表表名相同时导致的访问路径提示不能使用的问题。
进一步的,通过第一指示信息来指示查询计划生成时被扫描的目标表所属的目标查询块、以及目标表在目标查询块的查询范围表中的位置,可以解决在执行结构生成的时无法获知被扫描的目标表所属的目标查询块、以及目标表在目标查询块的查询范围表中的位置的问题。
进一步的,通过第二指示信息来指示每个查询块所对应的父查询块、以及具有父子关系的查询块中子查询块所涉及的目标表与父查询块所涉及的目标表之间的对应关系,可以解决多表访问的问题。
如图25所示,在一些可能的实施方式中,提供了一种数据查询装置,包括:
获取模块2501,用于获取待处理的查询语句;
第一生成模块2502,用于基于查询语句生成查询语句的目标解析树;
优化模块2503,用于将目标解析树作为第一次查询优化操作的查询输入信息,重复执行查询优化操作直至满足预设条件;
查询模块2504,用于基于满足预设条件时已获取到的访问路径提示,得到查询语句对应的目标访问路径提示,以基于目标访问路径提示进行查询,得到对应的查询结果;
其中,优化模块2503在执行查询优化操作时,具体用于:
基于查询输入信息执行查询操作,得到查询提示信息,查询提示信息包括访问路径提示和行数提示,行数提示提示了查询到的目标数据的数目;
若不满足预设条件,则将当前次查询优化操作得到的行数提示和上一次查询优化操作所基于的行数提示合并,并将合并后的行数提示和目标解析树作为下一次查询优化操作的查询输入信息。
在一些可能的实施方式中,每个查询优化操作得到的访问路径提示包括:查询语句所要查询的各目标表的连接顺序提示;
预设条件包括第一条件,第一条件包括:
当前次查询优化操作和上一次查询优化操作得到访问路径提示的连接顺序提示相同,或者,当前次查询优化操作和上一次查询优化操作得到的行数提示相同,或者,查询优化操作的执行次数达到第一设定值。
在一些可能的实施方式中,预设条件还包括第二条件,第二条件包括:查询优化操作的执行次数不小于第二设定值,其中,第二设定值小于第一设定值;
对应每次查询优化操作,在满足第一条件但不满足第二条件时,装置还包括第二生成模块,用于:
基于预设的查询提示生成策略,生成种子查询提示;
其中,下一次查询优化操作的查询输入信息还包括种子查询提示。
在一些可能的实施方式中,查询提示信息还包括查询操作的执行时间;
查询模块2504在基于满足预设条件时已获取到的访问路径提示,确定查询语句对应的目标访问路径提示时,具体用于以下任一项:
将最后一次查询优化操作得到的访问路径提示,作为目标访问路径提示;
根据各次查询优化操作对应的执行时间,将执行时间最短的查询优化操作得到的访问路径提示,作为目标访问路径提示。
在一些可能的实施方式中,目标解析树对应至少一个查询块,装置还包括第一确定模块,用于:
对于每个查询块,确定查询块所涉及的各个目标表在目标解析树中的位置;
对于每个目标表,根据目标表在目标解析树中位置,确定每个目标表的表标识;
优化模块2503在基于查询输入信息执行查询操作,得到查询提示信息时,具体用于:
基于查询输入信息和确定出的各个目标表的表标识,生成查询语句对应的查询计划;
基于查询计划和目标解析树执行查询操作,得到查询提示信息。
在一些可能的实施方式中,优化模块2503在基于查询计划和目标解析树执行查询操作,得到查询提示信息时,具体用于:
基于目标解析树和查询计划,生成查询语句对应的执行结构,其中,执行结构中包括第一指示信息,第一指示信息指示了在执行查询操作的过程中扫描目标表时,被扫描的目标表所属的目标查询块、以及目标表在目标查询块的查询范围表中的位置;
按照执行结构执行查询操作,生成查询提示信息,查询提示信息中的访问路径提示包括:基于第一指示信息得到的每个查询块所涉及的各个目标表的扫描方式提示。
在一些可能的实施方式中,对于每个查询块,目标解析树和执行结构中包括各个查询块所涉及的每个目标表的表结构体,其中,表结构体中包括第一成员变量,第一成员变量指示了:表结构体对应的目标表所属的目标查询块的标识、以及表结构体对应的目标表在目标查询块的查询范围表中的位置;
其中,第一指示信息包括各个表结构体中的第一成员变量。
在一些可能的实施方式中,执行结构中还包括第二指示信息,第二指示信息指示了每个查询块所对应的父查询块、以及具有父子关系的查询块中子查询块所涉及的目标表与父查询块所涉及的目标表之间的对应关系;
查询提示信息中的访问路径提示还包括至少一条连接方式提示,每条连接方式提示用于提示至少两个目标表的连接方式;
对于每条连接方式提示,若连接方式提示对应的至少两个目标表中包括具有至少两个层级的查询块的目标表,装置还包括第一更新模块,用于:
对于连接方式提示对应的每个第一表,根据第二指示信息,确定第一表所对应的第二表,其中,第一表是至少两个层级的查询块的目标表中除最高层级的查询块的目标表之外的目标表,第一表对应的第二表是最高层级的查询块的目标表中第一表对应的目标表;
根据每个第一表对应的第二表,将连接方式提示更新为最高层级的查询块的至少两个目标表之间的连接方式提示。
在一些可能的实施方式中,对于每个查询块,目标解析树和执行结构中包括各个查询块所涉及的每个目标表的表结构体,其中,表结构体中包括第二成员变量,第二成员变量指示了:表结构体对应的目标表所属的目标查询块的父查询块的标识、以及表结构体对应的目标表的父关联表的位置,其中,父关联表是指表结构体对应的目标表在父查询块的目标表中所对应的目标表,父关联表的位置是指父关联表在父查询块的查询范围表中的位置;
其中,第二指示信息包括各个表结构体中的第二成员变量。
在一些可能的实施方式中,每次查询优化操作得到的访问路径提示中还包括至少一条连接顺序提示,每条连接顺序提示提示了至少两个目标表的连接顺序;
对于每条连接顺序提示,若连接顺序提示对应的至少两个目标表中包括具有至少两个层级的查询块的目标表,装置还包括第二更新模块,用于:
对于连接顺序提示对应的每个第一表,根据第二指示信息,确定第一表对应的第二表;
根据每个第一表对应的第二表,将连接顺序提示更新为至少两个层级中最高层级的查询块的至少两个目标表之间的连接顺序提示;
若具有至少两个层级的查询块的目标表中包括同一子查询块的至少两个目标表,根据连接顺序提示中同一子查询块的至少两个目标表的连接顺序,生成同一子查询块的连接顺序提示;
查询提示信息中的访问路径提示还包括同一子查询块的连接顺序提示。
在一些可能的实施方式中,第一生成模块2502在基于查询语句,生成查询语句的目标解析树时,具体用于:
基于查询语句,在访问路径提示数据库中进行查询,其中,访问路径提示数据库中存储有至少一个查询语句对应的访问路径提示;
若在访问路径提示数据库中未查询到查询语句对应的访问路径提示,则基于查询语句生成查询语句的目标解析树;
若访问路径提示数据库中查询到查询语句对应的访问路径提示,装置还包括第二确定模块,用于:
将查询到的访问路径提示确定为查询语句对应的目标访问路径提示;
若在访问路径提示数据库中未查询到查询语句对应的访问路径提示,在确定出查询语句对应的目标访问路径提示之后,装置还包括存储模块,用于:
将查询语句的目标访问路径提示关联存储到访问路径提示数据库中。
在一些可能的实施方式中,查询语句是基于复杂语句判断条件确定出的复杂查询语句。
本申请的数据查询装置,通过自动迭代的方式进行查询优化操作,自动优化访问路径提示,从而实现数据库访问路径的不断优化,自动确定出查询语句对应的最优的数据库访问路径,可以有效提高查询效率,尤其是在进行复杂查询时效果更加明显。
进一步的,通过根据各个目标表在目标解析树中的唯一位置,来生成每一目标表唯一对应的表标识,再根据表标识获取查询提示信息,可以克服不同目标表或不同层级的目标表表名相同时导致的访问路径提示不能使用的问题。
进一步的,通过第一指示信息来指示查询计划生成时被扫描的目标表所属的目标查询块、以及目标表在目标查询块的查询范围表中的位置,可以解决在执行结构生成的时无法获知被扫描的目标表所属的目标查询块、以及目标表在目标查询块的查询范围表中的位置的问题。
进一步的,通过第二指示信息来指示每个查询块所对应的父查询块、以及具有父子关系的查询块中子查询块所涉及的目标表与父查询块所涉及的目标表之间的对应关系,可以解决多表访问的问题。
本申请实施例的装置可执行本申请实施例所提供的方法,其实现原理相类似,本申请各实施例的装置中的各模块所执行的动作是与本申请各实施例的方法中的步骤相对应的,对于装置的各模块的详细功能描述具体可以参见前文中所示的对应方法中的描述,此处不再赘述。
本申请实施例中提供了一种电子设备,包括存储器、处理器及存储在存储器上的计算机程序,该处理器执行存储器中存储的计算机程序时可实现本申请任一可选实施例中的方法。
图26示出了本发明实施例所适用的一种电子设备的结构示意图,如图26所示,该电子设备可以为服务器或者用户终端,该电子设备可以用于实施本发明任一实施例中提供的方法。
如图26中所示,该电子设备2600主要可以包括至少一个处理器2601(图26中示出了一个)、存储器2602、通信模块2603和输入/输出接口2604等组件,可选的,各组件之间可以通过总线2605实现连接通信。需要说明的是,图26中示出的该电子设备2600的结构只是示意性的,并不构成对本申请实施例提供的方法所适用的电子设备的限定。
其中,存储器2602可以用于存储操作系统和应用程序等,应用程序可以包括在被处理器2601调用时实现本发明实施例所示方法的计算机程序,还可以包括用于实现其他功能或服务的程序。存储器2602可以是ROM(Read Only Memory,只读存储器)或可存储静态信息和指令的其他类型的静态存储设备,RAM(Random Access Memory,随机存取存储器)或者可存储信息和计算机程序的其他类型的动态存储设备,也可以是EEPROM(ElectricallyErasable Programmable Read Only Memory,电可擦可编程只读存储器)、CD-ROM(CompactDisc Read Only Memory,只读光盘)或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。
处理器2601通过总线2605与存储器2602连接,通过调用存储器2602中所存储的应用程序实现相应的功能。其中,处理器2601可以是CPU(Central Processing Unit,中央处理器),通用处理器,DSP(Digital Signal Processor,数据信号处理器),ASIC(Application Specific Integrated Circuit,专用集成电路),FPGA(FieldProgrammable Gate Array,现场可编程门阵列)或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合,其可以实现或执行结合本发明公开内容所描述的各种示例性的逻辑方框,模块和电路。处理器2601也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,DSP和微处理器的组合等。
电子设备2600可以通过通信模块2603(可以包括但不限于网络接口等组件)连接到网络,以通过网络与其它设备(如用户终端或服务器等)的通信,实现数据的交互,如向其他设备发送数据或从其他设备接收数据。其中,通信模块2603可以包括有线网络接口和/或无线网络接口等,即通信模块可以包括有线通信模块或无线通信模块中的至少一项。
电子设备2600可以通过输入/输出接口2604可以连接所需要的输入/输出设备,如键盘、显示设备等,电子设备260自身可以具有显示设备,还可以通过接口2604外接其他显示设备。可选的,通过该接口2604还可以连接存储装置,如硬盘等,以可以将电子设备2600中的数据存储到存储装置中,或者读取存储装置中的数据,还可以将存储装置中的数据存储到存储器2602中。可以理解的,输入/输出接口2604可以是有线接口,也可以是无线接口。根据实际应用场景的不同,与输入/输出接口2604连接的设备,可以是电子设备2600的组成部分,也可以是在需要时与电子设备2600连接的外接设备。
用于连接各组件的总线2605可以包括一通路,在上述组件之间传送信息。总线2605可以是PCI(Peripheral Component Interconnect,外设部件互连标准)总线或EISA(Extended Industry Standard Architecture,扩展工业标准结构)总线等。根据功能的不同,总线2605可以分为地址总线、数据总线、控制总线等。
可选的,对于本发明实施例所提供的方案而言,存储器2602可以用于存储执行本发明方案的计算机程序,并由处理器2601来运行,处理器2601运行该计算机程序时实现本发明实施例提供的方法或装置的动作。
基于与本申请实施例提供的方法相同的原理,本申请实施例提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时可实现前述方法实施例的相应内容。
本申请实施例还提供了一种计算机程序产品,该产品包括计算机程序,该计算机程序被处理器执行时可实现前述方法实施例的相应内容。
需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”、“1”、“2”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除图示或文字描述以外的顺序实施。
应该理解的是,虽然本申请实施例的流程图中通过箭头指示各个操作步骤,但是这些步骤的实施顺序并不受限于箭头所指示的顺序。除非本文中有明确的说明,否则在本申请实施例的一些实施场景中,各流程图中的实施步骤可以按照需求以其他的顺序执行。此外,各流程图中的部分或全部步骤基于实际的实施场景,可以包括多个子步骤或者多个阶段。这些子步骤或者阶段中的部分或全部可以在同一时刻被执行,这些子步骤或者阶段中的每个子步骤或者阶段也可以分别在不同的时刻被执行。在执行时刻不同的场景下,这些子步骤或者阶段的执行顺序可以根据需求灵活配置,本申请实施例对此不限制。
以上所述仅是本申请部分实施场景的可选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请的方案技术构思的前提下,采用基于本申请技术思想的其他类似实施手段,同样属于本申请实施例的保护范畴。
Claims (15)
1.一种数据查询方法,其特征在于,所述方法包括:
获取待处理的查询语句;
基于所述查询语句生成所述查询语句的目标解析树;
将所述目标解析树作为第一次查询优化操作的查询输入信息,重复执行查询优化操作直至满足预设条件;
基于满足所述预设条件时已获取到的访问路径提示,得到所述查询语句对应的目标访问路径提示,以基于所述目标访问路径提示进行查询,得到对应的查询结果;
其中,所述查询优化操作包括:
基于查询输入信息执行查询操作,得到查询提示信息,所述查询提示信息包括访问路径提示和行数提示,所述行数提示提示了查询到的目标数据的数目;
若不满足所述预设条件,则将当前次查询优化操作得到的行数提示和上一次查询优化操作所基于的行数提示合并,并将合并后的行数提示和所述目标解析树作为下一次查询优化操作的查询输入信息。
2.根据权利要求1所述的方法,其特征在于,每个所述查询优化操作得到的访问路径提示包括:所述查询语句所要查询的各目标表的连接顺序提示;
所述预设条件包括第一条件,所述第一条件包括:
当前次查询优化操作和上一次查询优化操作得到访问路径提示的连接顺序提示相同,或者,当前次查询优化操作和上一次查询优化操作得到的行数提示相同,或者,查询优化操作的执行次数达到第一设定值。
3.根据权利要求2所述的方法,其特征在于,所述预设条件还包括第二条件,所述第二条件包括:查询优化操作的执行次数不小于第二设定值,其中,所述第二设定值小于所述第一设定值;
对应每次所述查询优化操作,在满足所述第一条件但不满足所述第二条件时,所述方法还包括:
基于预设的查询提示生成策略,生成种子查询提示;
其中,所述下一次查询优化操作的查询输入信息还包括所述种子查询提示。
4.根据权利要求1至3中任一项所述的方法,其特征在于,所述查询提示信息还包括查询操作的执行时间;
所述基于满足所述预设条件时已获取到的访问路径提示,确定所述查询语句对应的目标访问路径提示,包括以下任一项:
将最后一次查询优化操作得到的访问路径提示,作为所述目标访问路径提示;
根据各次查询优化操作对应的执行时间,将执行时间最短的查询优化操作得到的访问路径提示,作为所述目标访问路径提示。
5.根据权利要求1至3中任一项所述的方法,其特征在于,所述目标解析树对应至少一个查询块,在生成所述查询语句的目标解析树之后,所述方法还包括:
对于每个所述查询块,确定所述查询块所涉及的各个目标表在所述目标解析树中的位置;
对于每个所述目标表,根据所述目标表在所述目标解析树中位置,确定每个所述目标表的表标识;
所述基于所述查询输入信息执行查询操作,得到查询提示信息,包括:
基于所述查询输入信息和确定出的各个所述目标表的表标识,生成所述查询语句对应的查询计划;
基于所述查询计划和所述目标解析树执行查询操作,得到查询提示信息。
6.根据权利要求5所述的方法,其特征在于,所述基于所述查询计划和所述目标解析树执行查询操作,得到查询提示信息,包括:
基于所述目标解析树和所述查询计划,生成所述查询语句对应的执行结构,其中,所述执行结构中包括第一指示信息,所述第一指示信息指示了在执行查询操作的过程中扫描目标表时,被扫描的目标表所属的目标查询块、以及目标表在所述目标查询块的查询范围表中的位置;
按照所述执行结构执行查询操作,生成查询提示信息,所述查询提示信息中的访问路径提示包括:基于所述第一指示信息得到的每个所述查询块所涉及的各个目标表的扫描方式提示。
7.根据权利要求6所述的方法,其特征在于,对于每个所述查询块,所述目标解析树和所述执行结构中包括各个所述查询块所涉及的每个目标表的表结构体,其中,所述表结构体中包括第一成员变量,所述第一成员变量指示了:所述表结构体对应的目标表所属的目标查询块的标识、以及所述表结构体对应的目标表在所述目标查询块的查询范围表中的位置;
其中,所述第一指示信息包括各个所述表结构体中的第一成员变量。
8.根据权利要求6所述的方法,其特征在于,所述执行结构中还包括第二指示信息,所述第二指示信息指示了每个所述查询块所对应的父查询块、以及具有父子关系的查询块中子查询块所涉及的目标表与父查询块所涉及的目标表之间的对应关系;
所述查询提示信息中的访问路径提示还包括至少一条连接方式提示,每条所述连接方式提示用于提示至少两个目标表的连接方式;
对于每条所述连接方式提示,若所述连接方式提示对应的至少两个目标表中包括具有至少两个层级的查询块的目标表,所述方法还包括:
对于所述连接方式提示对应的每个第一表,根据所述第二指示信息,确定所述第一表所对应的第二表,其中,所述第一表是所述至少两个层级的查询块的目标表中除最高层级的查询块的目标表之外的目标表,所述第一表对应的第二表是所述最高层级的查询块的目标表中所述第一表对应的目标表;
根据每个所述第一表对应的第二表,将所述连接方式提示更新为所述最高层级的查询块的至少两个目标表之间的连接方式提示。
9.根据权利要求8所述的方法,其特征在于,对于每个所述查询块,所述目标解析树和所述执行结构中包括各个所述查询块所涉及的每个目标表的表结构体,其中,所述表结构体中包括第二成员变量,所述第二成员变量指示了:所述表结构体对应的目标表所属的目标查询块的父查询块的标识、以及所述表结构体对应的目标表的父关联表的位置,其中,所述父关联表是指所述表结构体对应的目标表在所述父查询块的目标表中所对应的目标表,所述父关联表的位置是指所述父关联表在所述父查询块的查询范围表中的位置;
其中,所述第二指示信息包括各个所述表结构体中的第二成员变量。
10.根据权利要求8所述的方法,其特征在于,每次查询优化操作得到的访问路径提示中还包括至少一条连接顺序提示,每条所述连接顺序提示提示了至少两个目标表的连接顺序;
对于每条所述连接顺序提示,若所述连接顺序提示对应的至少两个目标表中包括具有至少两个层级的查询块的目标表,所述方法还包括:
对于所述连接顺序提示对应的每个第一表,根据所述第二指示信息,确定所述第一表对应的第二表;
根据所述每个所述第一表对应的第二表,将所述连接顺序提示更新为所述至少两个层级中最高层级的查询块的至少两个目标表之间的连接顺序提示;
若所述具有至少两个层级的查询块的目标表中包括同一子查询块的至少两个目标表,根据所述连接顺序提示中所述同一子查询块的至少两个目标表的连接顺序,生成所述同一子查询块的连接顺序提示;
所述查询提示信息中的访问路径提示还包括所述同一子查询块的连接顺序提示。
11.根据权利要求1至3中任一项所述的方法,其特征在于,所述基于所述查询语句,生成所述查询语句的目标解析树,包括:
基于所述查询语句,在访问路径提示数据库中进行查询,其中,所述访问路径提示数据库中存储有至少一个查询语句对应的访问路径提示;
若在所述访问路径提示数据库中未查询到所述查询语句对应的访问路径提示,则基于所述查询语句生成所述查询语句的目标解析树;
若所述访问路径提示数据库中查询到所述查询语句对应的访问路径提示,所述方法还包括:
将查询到的访问路径提示确定为所述查询语句对应的目标访问路径提示;
若在所述访问路径提示数据库中未查询到所述查询语句对应的访问路径提示,在确定出所述查询语句对应的目标访问路径提示之后,所述方法还包括:
将所述查询语句的目标访问路径提示关联存储到所述访问路径提示数据库中。
12.根据权利要求1至3中任一项所述的方法,其特征在于,所述查询语句是基于复杂语句判断条件确定出的复杂查询语句。
13.一种电子设备,其特征在于,所述电子设备包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器执行所述计算机程序以实现权利要求1至12中任一项所述的方法。
14.一种计算机可读存储介质,其特征在于,所述存储介质中存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1至12中任一项所述的方法。
15.一种计算机程序产品,其特征在于,所述计算机产品包括计算机程序,所述计算机程序被处理器执行时实现权利要求1至12中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210731062.4A CN115114325B (zh) | 2022-06-24 | 2022-06-24 | 数据查询方法、装置、电子设备以及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210731062.4A CN115114325B (zh) | 2022-06-24 | 2022-06-24 | 数据查询方法、装置、电子设备以及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115114325A true CN115114325A (zh) | 2022-09-27 |
CN115114325B CN115114325B (zh) | 2023-04-18 |
Family
ID=83329631
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210731062.4A Active CN115114325B (zh) | 2022-06-24 | 2022-06-24 | 数据查询方法、装置、电子设备以及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115114325B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116501743A (zh) * | 2023-06-21 | 2023-07-28 | 中国电信股份有限公司 | 联表代价生成、重排方法和数据处理方法及装置、系统 |
Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110035369A1 (en) * | 2009-08-04 | 2011-02-10 | Sybase, Inc. | Query Optimization with Memory I/O Awareness |
US20120084315A1 (en) * | 2010-10-04 | 2012-04-05 | Sybase, Inc. | Query Plan Optimization for Prepared SQL Statements |
CN102750469A (zh) * | 2012-05-18 | 2012-10-24 | 北京邮电大学 | 一种基于开放平台的安全检测系统及其检测方法 |
CN103176974A (zh) * | 2011-12-20 | 2013-06-26 | 国际商业机器公司 | 优化数据库中访问路径的方法和装置 |
US20140304251A1 (en) * | 2013-04-03 | 2014-10-09 | International Business Machines Corporation | Method and Apparatus for Optimizing the Evaluation of Semantic Web Queries |
US20180218038A1 (en) * | 2017-01-30 | 2018-08-02 | International Business Machines Corportation | Database optimization based on forecasting hardware statistics using data mining techniques |
CN111352950A (zh) * | 2020-03-04 | 2020-06-30 | 上海达梦数据库有限公司 | 数据库表等值连接的优化方法、装置、服务器及存储介质 |
CN112905595A (zh) * | 2021-03-05 | 2021-06-04 | 腾讯科技(深圳)有限公司 | 一种数据查询方法、装置及计算机可读存储介质 |
CN113553339A (zh) * | 2021-07-13 | 2021-10-26 | 杭州安恒信息技术股份有限公司 | 数据查询方法、中间件、电子装置和存储介质 |
CN113760961A (zh) * | 2020-08-11 | 2021-12-07 | 北京京东振世信息技术有限公司 | 数据查询方法和装置 |
CN114297233A (zh) * | 2021-12-31 | 2022-04-08 | 北京人大金仓信息技术股份有限公司 | 数据库查询方法、装置、电子设备、介质和程序产品 |
CN114328612A (zh) * | 2022-01-04 | 2022-04-12 | 北京金山云网络技术有限公司 | 查询优化器的数据处理方法、装置及电子设备 |
-
2022
- 2022-06-24 CN CN202210731062.4A patent/CN115114325B/zh active Active
Patent Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110035369A1 (en) * | 2009-08-04 | 2011-02-10 | Sybase, Inc. | Query Optimization with Memory I/O Awareness |
US20120084315A1 (en) * | 2010-10-04 | 2012-04-05 | Sybase, Inc. | Query Plan Optimization for Prepared SQL Statements |
CN103176974A (zh) * | 2011-12-20 | 2013-06-26 | 国际商业机器公司 | 优化数据库中访问路径的方法和装置 |
CN102750469A (zh) * | 2012-05-18 | 2012-10-24 | 北京邮电大学 | 一种基于开放平台的安全检测系统及其检测方法 |
US20140304251A1 (en) * | 2013-04-03 | 2014-10-09 | International Business Machines Corporation | Method and Apparatus for Optimizing the Evaluation of Semantic Web Queries |
US20180218038A1 (en) * | 2017-01-30 | 2018-08-02 | International Business Machines Corportation | Database optimization based on forecasting hardware statistics using data mining techniques |
CN111352950A (zh) * | 2020-03-04 | 2020-06-30 | 上海达梦数据库有限公司 | 数据库表等值连接的优化方法、装置、服务器及存储介质 |
CN113760961A (zh) * | 2020-08-11 | 2021-12-07 | 北京京东振世信息技术有限公司 | 数据查询方法和装置 |
CN112905595A (zh) * | 2021-03-05 | 2021-06-04 | 腾讯科技(深圳)有限公司 | 一种数据查询方法、装置及计算机可读存储介质 |
CN113553339A (zh) * | 2021-07-13 | 2021-10-26 | 杭州安恒信息技术股份有限公司 | 数据查询方法、中间件、电子装置和存储介质 |
CN114297233A (zh) * | 2021-12-31 | 2022-04-08 | 北京人大金仓信息技术股份有限公司 | 数据库查询方法、装置、电子设备、介质和程序产品 |
CN114328612A (zh) * | 2022-01-04 | 2022-04-12 | 北京金山云网络技术有限公司 | 查询优化器的数据处理方法、装置及电子设备 |
Non-Patent Citations (3)
Title |
---|
ATAY, MUSTAFA等: "Optimizing XML-to-SQL Query Translation for Analytical Databases Using Intelligent Path Derivation", 《PROCEEDINGS OF THE 48TH ANNUAL SOUTHEAST REGIONAL CONFERENCE (ACM SE 10)》 * |
于晨昕: "管理信息系统中的DB2数据库查询优化研究", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
范颖捷: "XML索引与查询的若干关键技术研究", 《中国博士学位论文全文数据库 信息科技辑》 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116501743A (zh) * | 2023-06-21 | 2023-07-28 | 中国电信股份有限公司 | 联表代价生成、重排方法和数据处理方法及装置、系统 |
CN116501743B (zh) * | 2023-06-21 | 2023-11-24 | 中国电信股份有限公司 | 联表代价生成、重排方法和数据处理方法及装置、系统 |
Also Published As
Publication number | Publication date |
---|---|
CN115114325B (zh) | 2023-04-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11681702B2 (en) | Conversion of model views into relational models | |
CN107402988B (zh) | 一种分布式NewSQL数据库系统和半结构化数据查询方法 | |
CN110908997B (zh) | 数据血缘构建方法、装置、服务器及可读存储介质 | |
CN110795455B (zh) | 依赖关系解析方法、电子装置、计算机设备及可读存储介质 | |
CN107038222B (zh) | 数据库缓存实现方法及其系统 | |
US20100280990A1 (en) | Etl for process data warehouse | |
CN104123374A (zh) | 分布式数据库中聚合查询的方法及装置 | |
CN103810224A (zh) | 信息持久化和查询方法及装置 | |
CN112988782B (zh) | Hive支持交互式查询的方法、装置及存储介质 | |
CN112579610A (zh) | 多数据源结构分析方法、系统、终端设备及存储介质 | |
CN110837515A (zh) | 一种基于数据库的数据处理方法及电子设备 | |
CN115114325B (zh) | 数据查询方法、装置、电子设备以及存储介质 | |
CN114328612A (zh) | 查询优化器的数据处理方法、装置及电子设备 | |
CN114490762A (zh) | 用于决策引擎的数据源取数方法、装置、介质和设备 | |
CN117421302A (zh) | 一种数据处理方法及相关设备 | |
CN114490724B (zh) | 处理数据库查询语句的方法和装置 | |
CN116610694A (zh) | 一种基于列和访问语句关系的规则校验方法和系统 | |
CN115757479A (zh) | 数据库的查询优化方法、机器可读存储介质与计算机设备 | |
CN112416966B (zh) | 即席查询方法、装置、计算机设备和存储介质 | |
CN114547083A (zh) | 数据处理方法、装置及电子设备 | |
CN116795859A (zh) | 数据分析方法、装置、计算机设备和存储介质 | |
CN115292313A (zh) | 一种伪列实现方法、装置、电子设备及存储介质 | |
WO2021248319A1 (en) | Database management system and method for graph view selection for relational-graph database | |
CN113076330B (zh) | 查询处理方法、装置、数据库系统、电子设备及存储介质 | |
CN114153438A (zh) | 一种api自动生成系统 |
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 | ||
TR01 | Transfer of patent right |
Effective date of registration: 20230914 Address after: 518000 Tencent Building, No. 1 High-tech Zone, Nanshan District, Shenzhen City, Guangdong Province, 35 Floors Patentee after: TENCENT TECHNOLOGY (SHENZHEN) Co.,Ltd. Patentee after: TENCENT CLOUD COMPUTING (BEIJING) Co.,Ltd. Address before: 518000 Tencent Building, No. 1 High-tech Zone, Nanshan District, Shenzhen City, Guangdong Province, 35 Floors Patentee before: TENCENT TECHNOLOGY (SHENZHEN) Co.,Ltd. |
|
TR01 | Transfer of patent right |