CN108197187B - 查询语句的优化方法、装置、存储介质和计算机设备 - Google Patents
查询语句的优化方法、装置、存储介质和计算机设备 Download PDFInfo
- Publication number
- CN108197187B CN108197187B CN201711435768.1A CN201711435768A CN108197187B CN 108197187 B CN108197187 B CN 108197187B CN 201711435768 A CN201711435768 A CN 201711435768A CN 108197187 B CN108197187 B CN 108197187B
- Authority
- CN
- China
- Prior art keywords
- query
- node
- attribute value
- data
- associated attribute
- 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
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/2455—Query execution
- G06F16/24564—Applying rules; Deductive queries
-
- 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/245—Query processing
- G06F16/2458—Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
- G06F16/2471—Distributed queries
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Computational Linguistics (AREA)
- Fuzzy Systems (AREA)
- Mathematical Physics (AREA)
- Probability & Statistics with Applications (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种查询语句的优化方法、装置、存储介质和计算机设备,该方法包括:获取查询语句,根据查询语句得到查询树;从查询树的根节点开始遍历查询树的查询节点,当存在符合预设执行规则的查询节点时,获取该查询节点对应的查询数据作为当前查询数据;当当前查询数据中存在关联属性值时,提取关联属性值推送至对应的查询节点;当该查询节点存在未优化的关联查询节点时,获取该查询节点的查询数据,判断该查询节点的执行成本是否超过预设执行成本;若否,则将该查询数据作为当前查询数据进入当当前查询数据中存在关联属性值时的步骤直至关联属性值对应的关联查询节点不存在未优化的关联查询节点。本发明提高了跨数据库联查时的查询效率。
Description
技术领域
本发明涉及数据库技术领域,特别是涉及查询语句的优化方法、装置、存储介质和计算机设备。
背景技术
跨数据库联查指的是客户端发起一个查询请求,对多个分布在不同的数据库上的表进行关联查询。
传统技术中,由于信息系统按照业务模块垂直分布部署,因此,客户端进行跨数据联查时,通常并不知道各模块的数据库分布情况,导致无法对查询进行优化,如关联数据表在查询时无过滤条件或者仅有大范围的过滤条件,在未优化的情况下,可能造成查询全表或查询出大量不必要数据集,导致查询的效率低。
发明内容
基于此,有必要针对上述技术问题,提供一种查询语句的优化方法、装置、存储介质和计算机设备,以提高查询效率。
一种查询语句的优化方法,所述方法包括:
获取本次查询对应的查询语句,根据所述查询语句得到查询树;
从所述查询树的根节点开始遍历所述查询树的查询节点,当存在符合预设执行规则的查询节点时,获取所述符合预设执行规则的查询节点对应的查询数据作为当前查询数据;
当所述当前查询数据中存在关联属性值时,提取所述关联属性值作为优化条件推送至所述关联属性值对应的关联查询节点以对所述关联查询节点进行优化;
当所述关联属性值对应的关联查询节点存在未优化的关联查询节点时,获取所述关联属性值对应的关联查询节点的查询数据,根据所述查询数据判断所述关联属性值对应的关联查询节点的执行成本是否超过预设执行成本;
若否,则将所述关联属性值对应的关联查询节点的查询数据作为当前查询数据,进入所述当所述当前查询数据中存在关联属性值时,提取所述关联属性值作为优化条件推送至所述关联属性值对应的关联查询节点以对所述关联查询节点进行优化的步骤直至所述关联属性值对应的关联查询节点不存在未优化的关联查询节点。
在其中一个实施例中,获取本次查询对应的查询语句,根据所述查询语句得到查询树的步骤之后包括:
获取垂直分库信息,根据所述垂直分库信息判断所述查询树对应的数据表集合中是否存在属于相同数据库的数据表;
若存在,则将所述属于相同数据库的数据表对应的查询节点进行合并。
在其中一个实施例中,所述当所述当前查询数据中存在关联属性值时,提取所述关联属性值作为优化条件推送至所述关联属性值对应的关联查询节点以对所述关联查询节点进行优化的步骤包括:
判断所述查询节点是否包含主键查询条件;
若是,则判定所述查询节点为符合预设执行规则的查询节点。
在其中一个实施例中,所述当所述当前查询数据中存在关联属性值时,提取所述关联属性值作为优化条件推送至所述关联属性值对应的关联查询节点以对所述关联查询节点进行优化的步骤之前还包括:
当不存在符合预设执行规则的查询节点时,再次从所述根节点开始遍历所述查询树,判断是否存在执行成本不超过预设执行成本的查询节点;
当存在执行成本不超过预设执行成本的查询节点时,获取所述执行成本不超过预设执行成本的查询节点的查询数据作为当前查询数据。
在其中一个实施例中,所述当存在执行成本不超过预设执行成本的查询节点时,获取所述执行成本不超过预设执行成本的查询节点的查询数据作为当前查询数据的步骤包括:
获取所述查询节点对应的数据表的前N+1条查询记录,判断所述前N+1条查询记录中目标数据的数目是否超过N,其中,N为预设阈值;
若否,则判定所述查询节点为执行成本不超过预设执行成本的查询节点。
一种查询语句的优化装置,所述装置包括:
查询树生成模块,用于获取本次查询对应的查询语句,根据所述查询语句得到查询树;
查询数据获取模块,用于从所述查询树的根节点开始遍历所述查询树的查询节点,当存在符合预设执行规则的查询节点时,获取所述符合预设执行规则的查询节点对应的查询数据作为当前查询数据;
优化条件推送模块,用于当所述当前查询数据中存在关联属性值时,提取所述关联属性值作为优化条件推送至所述关联属性值对应的关联查询节点以对所述关联查询节点进行优化;
执行成本判断模块,用于当所述关联属性值对应的关联查询节点存在未优化的关联查询节点时,获取所述关联属性值对应的关联查询节点的查询数据,根据所述查询数据判断所述关联属性值对应的关联查询节点的执行成本是否超过预设执行成本;
循环模块,用于若否,则将所述关联属性值对应的关联查询节点的查询数据作为当前查询数据,进入所述当所述当前查询数据中存在关联属性值时,提取所述关联属性值作为优化条件推送至所述关联属性值对应的关联查询节点以对所述关联查询节点进行优化的步骤直至所述关联属性值对应的关联查询节点不存在未优化的关联查询节点。
在其中一个实施例中,所述装置还包括:
垂直分库信息获取模块,用于获取垂直分库信息,根据所述垂直分库信息判断所述查询树对应的数据表集合中是否存在属于相同数据库的数据表;
查询节点合并模块,用于若存在,则将所述属于相同数据库的数据表对应的查询节点进行合并。
在其中一个实施例中,所述查询数据获取模块包括:
主键查询条件判断模块,用于判断所述查询节点是否包含主键查询条件;
判定模块,用于若是,则判定所述查询节点为符合预设执行规则的查询节点。
一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时,使得所述处理器执行上述查询语句的优化所述的步骤。
一种计算机设备,所述计算机设备包括存储器和处理器,所述存储器中储存有计算机程序,所述计算机程序被所述处理器执行时,使得所述处理器执行上述查询语句的优化所述的步骤。
上述查询语句的优化方法、装置、存储介质和计算机设备,首先获取本次查询对应的查询语句,根据查询语句得到查询树;从查询树的根节点开始遍历查询树的查询节点,当存在符合预设执行规则的查询节点时,获取符合预设执行规则的查询节点对应的查询数据作为当前查询数据;当当前查询数据中存在关联属性值时,提取关联属性值作为优化条件推送至关联属性值对应的关联查询节点以对关联查询节点进行优化;当关联属性值对应的关联查询节点存在未优化的关联查询节点时,获取关联属性值对应的关联查询节点的查询数据,根据查询数据判断关联属性值对应的关联查询节点的执行成本是否超过预设执行成本;若否,则将关联属性值对应的关联查询节点的查询数据作为当前查询数据,进入当当前查询数据中存在关联属性值时,提取关联属性值作为优化条件推送至关联属性值对应的关联查询节点以对关联查询节点进行优化的步骤直至关联属性值对应的关联查询节点不存在未优化的关联查询节点,通过对已经优化后的查询节点执行查询获得查询数据并提取属性值推送至其未优化的关联查询节点对关联查询节点进行优化,实现了查询树的动态优化,提高了跨数据库联查时的查询效率。
附图说明
图1为一个实施例中查询语句的优化方法的步骤流程图;
图2为另一个实施例中查询语句的优化方法的流程图;
图3为一个实施例中图1中步骤S120的步骤流程图;
图4为又一个实施例中查询语句的优化方法的流程图;
图5为一个实施例中图4中步骤S420的步骤流程图;
图6为一个实施例中查询语句的优化装置的结构框图;
图7为另一个实施例中查询语句的优化装置的结构框图;
图8为一个实施例中查询数据获取模块的结构框图;
图9为一个实施例中计算机设备的内部结构图。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图对本发明的具体实施方式做详细的说明。在下面的描述中阐述了很多具体细节以便于充分理解本发明。但是本发明能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本发明内涵的情况下做类似改进,因此本发明不受下面公开的具体实施的限制。
除非另有定义,本文所使用的所有的技术和科学术语与属于本发明的技术领域的技术人员通常理解的含义相同。本文中在本发明的说明书中所使用的术语只是为了描述具体的实施例的目的,不是旨在限制本发明。
在一个实施例中,如图1所示,提供了一种查询语句的优化方法,包括以下步骤:
步骤S110,获取本次查询对应的查询语句,根据查询语句得到查询树。
具体地,查询语句指的是结构化查询语言(Structured Query Language,SQL),如:select*from A
inner join B on B.fid=A.bid
inner join C on C.id=B.cid
inner join D on D.id=A.did
where...,其中,A、B、C、D代表四个数据表的表名。
在本实施例中,进行跨数据库联查时,用户会先在客户端输入查询语句,然后输入查询指令,该查询指令中携带本次查询的查询语句,客户端接收到查询指令后,对该查询指令进行解析,获取查询指令中携带的查询语句,对查询语句进行拆分,得到各个数据表对应的查询语句,将主表对应的查询语句作为根节点,其他各关联表对应的查询语句作为子节点,并根据各数据表对应的引用对象之间的聚合关系得到各个节点之间的连接关系,从而生成查询树。
步骤S120,从查询树的根节点开始遍历查询树的查询节点,当存在符合预设执行规则的查询节点时,获取符合预设执行规则的查询节点对应的查询数据作为当前查询数据。
具体地,从查询树的根节点开始,向下依次遍历查询树的各个查询节点,每访问一个查询节点时,判断该查询节点是否符合预设执行规则,若符合,则说明当前查询树存在符合预设执行规则的查询节点。
在一个实施例中,客户端从查询树的根节点开始依次遍历查询树的各个查询节点时,当访问到第一个符合预设执行规则的查询节点时,将该查询节点作为目标查询节点并获取该查询节点对应的查询数据,对于该查询节点以下的子节点,可以不需要再判断是否符合预设执行规则。
在另一个实施例中,客户端可以从查询树的根节点开始遍历查询树的所有查询节点,找出所有符合预设执行规则的查询节点,选择任意一个查询作为目标查询节点,并获取该查询节点对应的查询数据作为当前查询数据。
步骤S130,当当前查询数据中存在关联属性值时,提取关联属性值作为优化条件推送至关联属性值对应的关联查询节点以对关联查询节点进行优化。
具体地,在查询树中,存在父子关系的两个查询节点互为关联查询节点。两个关联查询节点对应的数据库之间存在关联属性值,关联属性值即两个关联数据库之间属性相同的数据,某一个数据库中的关联属性值可以为其关联数据库的主键或外键,如某个查询树的第一级查询节点对应的数据库为为商品数据库,包括商品编码、商品名称、订单编号等信息;第二级查询节点对应的数据库为订单数据库,包括订单编码、物流公司信息;第三级查询节点对应的数据库为物流数据库,包括物流公司信息、配送人员信息,其中,第一级查询节点对应的数据库与第二级查询节点对应的数据库之间的关联属性值为订单编号信息,第二级查询节点对应的数据库与第三级查询节点对应的数据库之间的关联属性值为物流公司信息。
进一步,从当前查询数据中提取出关联属性值后,将关联属性值推送至关联属性值对应的关联查询节点,对该查询节点的过滤条件进行优化,并根据优化后的过滤条件对该查询节点对应的数据库执行查询,得到查询数据。
在一个实施例中,遍历分库查询树时,客户端选择的目标查询节点为分库查询树的其中一个子节点时,从该子节点对应的查询数据中提取的关联属性会包含其父节点对应的数据库的关联属性值,同时也会包含其子节点对应的数据库的关联属性值,可先推送其父节点对应的关联属性值,再推送其子节点对应的关联属性值;或者先推送其子节点对应的关联属性值,再推送其父节点对应的关联属性值;也可以同时推送其父节点的关联属性值与其子查询节点的关联属性值,具体怎样推送,本发明在此不作限定。
在一个实施例中,当查询数据中不存在关联属性值时,对该查询节点的关联节点不再推送优化条件。此时,若关联节点本身不存在查询条件,则该查询节点为空查询,对该查询节点不执行查询。其中,空查询指的是查询语句中主键值为空串或0,如以下查询语句都为空查询:
Select*from A where id in(空);
Select*from A where id=0;
Select*from A where id=”。
步骤S140,判断关联属性值对应的关联查询节点是否存在未优化的关联查询节点。
步骤S150,若存在,则获取关联属性值对应的关联查询节点的查询数据,根据查询数据判断关联属性值对应的关联查询节点的执行成本是否超过预设执行成本。
步骤S160,若否,则将关联属性值对应的关联查询节点的查询数据作为当前查询数据,进入步骤S130,直至关联属性值对应的关联查询节点不存在未优化的关联查询节点。
具体地,未优化的关联查询节点指的是没有接收过其对应的关联查询节点推送的优化条件的查询节点,在本实施例中,客户端将关联属性值对应的关联查询节点作为初始查询节点,向上或向下遍历查询树。
其中,当该初始查询节点为目标查询节点的子节点时,以该初始查询节点作为根节点向下遍历查询树,判断其关联属性值对应的关联查询节点是否存在未优化的关联查询节点,若不存在,则说明本次优化完成;若存在,则获取优化后的查询数据,根据该查询数据判断关联属性值对应的关联查询节点的执行成本是否超过预设执行成本,若否,则将优化后的查询数据作为当前查询数据,进入步骤S130,直至关联属性值对应的关联查询节点不存在未优化的关联查询节点。
当该初始查询节点为目标查询节点的父节点时,向上遍历查询树,判断其关联属性值对应的关联查询节点是否存在未优化的关联查询节点,若不存在,则说明本次优化完成;若存在,则获取优化后的查询数据,根据该查询数据判断关联属性值对应的关联查询节点的执行成本是否超过预设执行成本,若否,则将优化后的查询数据作为当前查询数据,进入步骤S130,直至关联属性值对应的关联查询节点不存在未优化的关联查询节点。
在一个实施例中,根据查询数据判断关联属性值对应的关联查询节点的执行成本是否超过预设执行成本,包括:判断查询数据的数目是否超过预设阈值,若是,则判定该查询节点的执行成本超过预设执行成本;若否,则判定该查询节点的执行成本不超过预设执行成本。
可以理解,在本实施例中,当目标查询节点同时存在子节点和父节点,可先将子节点作为初始查询节点向下遍历查询树,遍历完后,再以父节点作为初始查询节点向上遍历查询树;也可以先以父节点作为初始查询节点,先向上遍历查询树,遍历完后,再向下遍历查询树;也可以同时向上和向下遍历查询树,具体如何遍历,本发明在此不做限制。
上述的查询语句的优化方法,通过对已经优化后的查询节点执行查询获得查询数据并提取属性值推送至其未优化的关联查询节点对关联查询节点进行优化,实现了查询树的动态优化,提高了跨数据库联查时的查询效率。
在一个实施例中,如图2所示,图1中步骤S110之后包括:
步骤S210,获取垂直分库信息,根据垂直分库信息判断查询树对应的数据表集合中是否存在属于相同数据库的数据表。
步骤S220,若存在,则将属于相同数据库的数据表对应的查询节点进行合并。
垂直分库信息指的是将数据库垂直划分后得到的数据库信息集合,该数据库信息集合中包括数据表信息以及数据表所属的数据库信息,其中,垂直划分指的是把不同业务模块对应的数据分别放到不同的数据库,例如商品数据、订单数据、物流数据就可以分别放在三个不同的独立数据库中。数据表集合指的是各个查询节点对应的数据表所组成的集合。
在本实施中,垂直分库信息预先保存在客户端,客户端得到查询树后,从垂直分库信息中查询各个数据表所属的数据库,判断是否存在属于同一数据库的数据表,若存在,则将属于同一数据库的数据表对应的查询节点进行合并。如数据表B对应的查询语句为:seclect*from B where…(B的过滤条件),数据表C对应的查询语句为:seclect*from Cwhere…(C的过滤条件),若数据表B、数据表C属于相同的数据库,则可将数据表B、数据表C的查询语句合并为:
seclect*from B
Inner join C on C.id=B.cid
where…(B、C的过滤条件)。
在本实施例中,通过将属于同一数据库的数据表对应的查询节点进行合并,可简化查询树的结构,进一步提高查询效率。
在一个实施例中,如图3所示,当存在符合预设执行规则的查询节点时,获取符合预设执行规则的查询节点对应的查询数据作为当前查询数据,包括:
步骤S310,判断查询节点是否包含主键查询条件。
步骤S320,若是,则判定查询节点为符合预设执行规则的查询节点。
具体地,主键也叫主关键字(primary key)是数据表中的一个或多个字段,它的值用于唯一地标识数据表中的某一条记录。在两个数据表的关系中,主关键字用来在一个数据表中引用来自于另一个数据表中的特定记录。主键查询条件指的是指某个数据表的查询条件中包括该数据表的主键值,如查询某个数据表时,其查询语句为:select*from Bwhere id=100and……,则其中包含数据表B的主键值bid=100,因此该查询语句包含主键过滤条件。
在本实施例中,客户端查询节点是否包含主键查询条件,若是,则判定该查询节点为符合预设执行规则的查询节点,若否,则判定该查询节点不符合预设执行规则。
在一个实施例中,如图4所示,图1中步骤S130之前还还包括:
步骤S410,当不存在符合预设执行规则的查询节点时,再次从根节点开始遍历查询树,判断是否存在执行成本不超过预设执行成本的查询节点。
具体地,执行成本指的数据库执行查询的成本。在本实施例中,当客户端遍历完整个查询树后,未发现符合预设执行规则的查询节点时,再次从根节点开始遍历查询树,判断是否存在执行成本不超过预设执行成本的查询节点,若存在,则进入步骤S420;若不存在,则停止优化。
步骤S420,当存在执行成本不超过预设执行成本的查询节点时,获取执行成本不超过预设执行成本的查询节点的查询数据作为当前查询数据。
具体地,当客户端判断出存在执行成本不超过预设执行成本的查询节点时,对该查询节点执行查询得到查询数据,将该查询数据作为当前查询数据,进入步骤S130。
在一个实施例中,客户端从查询树的根节点开始依次遍历查询树的各个查询节点时,当访问到第一个满足执行成本不超过预设执行成本的查询节点时,将该查询节点作为目标查询节点并获取该查询节点对应的查询数据,对于该查询节点以下的子节点,可以不需要再判断是否满足执行成本不超过预设执行成本。
在另一个实施例中,客户端可以从查询树的根节点开始遍历查询树的所有查询节点,找出所有满足执行成本不超过预设执行成本的查询节点,选择任意一个查询作为目标查询节点,并获取该查询节点对应的查询数据作为当前查询数据。
在一个实施例中,如图5所示,当存在执行成本不超过预设执行成本的查询节点时,获取执行成本不超过预设执行成本的查询节点的查询数据作为当前查询数据的步骤包括:
步骤S420A,获取查询节点对应的数据表的前N+1条查询记录,判断前N+1条查询记录中目标数据的数目是否超过N,其中,N为预设阈值。
步骤S420B,若否,则判定查询节点为执行成本不超过预设执行成本的查询节点。
具体地,目标数据指的的是本次查询所需要得到的数据。在一个实施例中,对于各个查询节点对应的数据表,采用查询语句select*from A where id in(……)查询前N+1条记录,其中N为预设阈值,可根据具体业务场景事先配置,获取前N+1查询记录中得目标数据,判断目标数据的数目是否超过预设阈值N,若是,则判定该查询节点的执行成本超过预设执行成本,举个例子,在某一个月度订单数据表中,目标数据为12日当天的订单数据,设置的阈值为100,则查询前101条记录,若前101条查询记录中,12日当天的订单数据为101,则说明该查询的成本超过预设执行成本。
进一步,在本实施例中,当查询节点的执行成本超过预设执行成本时表示该查询节点不能作为关联属性值的推送源,此时,保留当前已经查询的数据和保持结果集游标继续往下遍历,对下一个查询节点进行相同的判断。
若该查询节点再次被遍历并被推送优化条件,则根据优化后的查询语句执行查询。
若该查询节点未再被遍历到(即未被继续推送优化条件),则使用上次查询的数据,并使用原来的游标获取N+1条之后的所有数据。
进一步,在本实施例中,当查询节点的成本不超过预设执行成本时,获取该查询节点对应的查询数据作为当前查询数据并进入步骤S130。
在一个实施例中,如图6所示,提供一种查询语句的优化装置,包括:
查询树生成模块602,用于获取本次查询对应的查询语句,根据查询语句得到查询树;
查询数据获取模块604,用于从查询树的根节点开始遍历查询树的查询节点,当存在符合预设执行规则的查询节点时,获取符合预设执行规则的查询节点对应的查询数据作为当前查询数据;
优化条件推送模块606,用于当当前查询数据中存在关联属性值时,提取关联属性值作为优化条件推送至关联属性值对应的关联查询节点以对关联查询节点进行优化;
执行成本判断模块608,用于当关联属性值对应的关联查询节点存在未优化的关联查询节点时,获取关联属性值对应的关联查询节点的查询数据,根据查询数据判断关联属性值对应的关联查询节点的执行成本是否超过预设执行成本;
循环模块610,用于若否,则将关联属性值对应的关联查询节点的查询数据作为当前查询数据,进入当当前查询数据中存在关联属性值时,提取关联属性值作为优化条件推送至关联属性值对应的关联查询节点以对关联查询节点进行优化的步骤直至关联属性值对应的关联查询节点不存在未优化的关联查询节点。
上述数据库联查的动态优化装置,通过对已经优化后的查询节点执行查询获得查询数据并提取属性值推送至其未优化的关联查询节点对关联查询节点进行优化,实现了查询树的动态优化,提高了跨数据库联查时的查询效率。
在一个实施例中,如图7所示,上述装置还包括:
垂直分库信息获取模块610,用于获取垂直分库信息,根据垂直分库信息判断查询树对应的数据表集合中是否存在属于相同数据库的数据表;
查询节点合并模块612,用于若存在,则将属于相同数据库的数据表对应的查询节点进行合并。
在一个实施例中,如图8所示,上述查询数据获取模块604包括:
主键查询条件判断模块604A,用于判断查询节点是否包含主键查询条件;
判定模块606B,用于若是,则判定查询节点为符合预设执行规则的查询节点。
在一个实施例中,上述装置还包括:成本优化模块,用于当不存在符合预设执行规则的查询节点时,再次从根节点开始遍历查询树,判断是否存在执行成本不超过预设执行成本的查询节点,当存在执行成本不超过预设执行成本的查询节点时,获取执行成本不超过预设执行成本的查询节点的查询数据作为当前查询数据。
在一个实施例中,上述成本优化模块还用于获取查询节点对应的数据表的前N+1条查询记录,判断前N+1条查询记录中目标数据的数目是否超过N,若否,则判定查询节点为执行成本不超过预设执行成本的查询节点,其中,N为预设阈值。
如图9所示,为一个实施例中计算机设备的内部结构图,该计算机设备可用作客户端。该计算机设备通过系统连接总线连接处理器、非易失性存储介质、内存储器和网络接口。其中,该计算机设备的非易失性存储介质可存储操作系统和计算机可读指令,该计算机可读指令被执行时,可使得处理器执行一种查询语句的优化方法。该计算机设备的处理器用于提供计算和控制能力,支撑整个计算机设备的运行。该内存储器中可储存有计算机可读指令,该计算机可读指令被处理器执行时,可使得处理器执行一种查询语句的优化方法。计算机设备的网络接口用于进行网络通信,如接收语音数据包,发送停止控制指令等。
本领域技术人员可以理解,图9中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,本申请提供的查询语句的优化装置可以实现为一种计算机程序的形式,计算机程序可在如图9所示的计算机设备上运行,计算机设备的非易失性存储介质可存储组成该查询语句的优化装置的各个程序模块,比如图6中的查询树生成模块602、查询数据获取模块604、优化条件推送模块606、执行成本判断模块608和循环模块610。各个程序模块中包括计算机可读指令,计算机可读指令用于使计算机设备执行本说明书中描述的本申请各个实施例的查询语句的优化方法中的步骤。例如,计算机设备可以通过如图6所示的查询语句的优化装置中的查询树生成模块602获取本次查询对应的查询语句,根据查询语句得到查询树。通过查询数据获取模块604从查询树的根节点开始遍历查询树的查询节点,当存在符合预设执行规则的查询节点时,获取符合预设执行规则的查询节点对应的查询数据作为当前查询数据。通过优化条件推送模块606当当前查询数据中存在关联属性值时,提取关联属性值作为优化条件推送至关联属性值对应的关联查询节点以对关联查询节点进行优化。
在一个实施例中,提供了一种计算机设备,包括存储器和处理器,存储器中储存有计算机程序,计算机程序被处理器执行时,使得处理器执行以下步骤:获取本次查询对应的查询语句,根据查询语句得到查询树;从查询树的根节点开始遍历查询树的查询节点,当存在符合预设执行规则的查询节点时,获取符合预设执行规则的查询节点对应的查询数据作为当前查询数据;当当前查询数据中存在关联属性值时,提取关联属性值作为优化条件推送至关联属性值对应的关联查询节点以对关联查询节点进行优化;当关联属性值对应的关联查询节点存在未优化的关联查询节点时,获取关联属性值对应的关联查询节点的查询数据,根据查询数据判断关联属性值对应的关联查询节点的执行成本是否超过预设执行成本;若否,则将关联属性值对应的关联查询节点的查询数据作为当前查询数据,进入当当前查询数据中存在关联属性值时,提取关联属性值作为优化条件推送至关联属性值对应的关联查询节点以对关联查询节点进行优化的步骤直至关联属性值对应的关联查询节点不存在未优化的关联查询节点。
在一个实施例中,计算机程序被处理器执行时,使得处理器执行获取本次查询对应的查询语句,根据查询语句得到查询树的步骤之后还执行:获取垂直分库信息,根据垂直分库信息判断查询树对应的数据表集合中是否存在属于相同数据库的数据表;若存在,则将属于相同数据库的数据表对应的查询节点进行合并。
在一个实施例中,当当前查询数据中存在关联属性值时,提取关联属性值作为优化条件推送至关联属性值对应的关联查询节点以对关联查询节点进行优化,包括:判断查询节点是否包含主键查询条件;若是,则判定查询节点为符合预设执行规则的查询节点。
在一个实施例中,计算机程序被处理器执行时,使得处理器执行当当前查询数据中存在关联属性值时,提取关联属性值作为优化条件推送至关联属性值对应的关联查询节点以对关联查询节点进行优化的步骤之前还执行:当不存在符合预设执行规则的查询节点时,再次从根节点开始遍历查询树,判断是否存在执行成本不超过预设执行成本的查询节点;当存在执行成本不超过预设执行成本的查询节点时,获取执行成本不超过预设执行成本的查询节点的查询数据作为当前查询数据。
在一个实施例中,当存在执行成本不超过预设执行成本的查询节点时,获取执行成本不超过预设执行成本的查询节点的查询数据作为当前查询数据,包括:获取查询节点对应的数据表的前N+1条查询记录,判断前N+1条查询记录中目标数据的数目是否超过N,其中,N为预设阈值;若否,则判定查询节点为执行成本不超过预设执行成本的查询节点。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时,使得处理器执行以下步骤:获取本次查询对应的查询语句,根据查询语句得到查询树;从查询树的根节点开始遍历查询树的查询节点,当存在符合预设执行规则的查询节点时,获取符合预设执行规则的查询节点对应的查询数据作为当前查询数据;当当前查询数据中存在关联属性值时,提取关联属性值作为优化条件推送至关联属性值对应的关联查询节点以对关联查询节点进行优化;当关联属性值对应的关联查询节点存在未优化的关联查询节点时,获取关联属性值对应的关联查询节点的查询数据,根据查询数据判断关联属性值对应的关联查询节点的执行成本是否超过预设执行成本;若否,则将关联属性值对应的关联查询节点的查询数据作为当前查询数据,进入当当前查询数据中存在关联属性值时,提取关联属性值作为优化条件推送至关联属性值对应的关联查询节点以对关联查询节点进行优化的步骤直至关联属性值对应的关联查询节点不存在未优化的关联查询节点。在一个实施例中,计算机程序被处理器执行时,使得处理器执行获取本次查询对应的查询语句,根据查询语句得到查询树的步骤之后还执行:获取垂直分库信息,根据垂直分库信息判断查询树对应的数据表集合中是否存在属于相同数据库的数据表;若存在,则将属于相同数据库的数据表对应的查询节点进行合并。
在一个实施例中,当当前查询数据中存在关联属性值时,提取关联属性值作为优化条件推送至关联属性值对应的关联查询节点以对关联查询节点进行优化,包括:判断查询节点是否包含主键查询条件;若是,则判定查询节点为符合预设执行规则的查询节点。
在一个实施例中,计算机程序被处理器执行时,使得处理器执行当当前查询数据中存在关联属性值时,提取关联属性值作为优化条件推送至关联属性值对应的关联查询节点以对关联查询节点进行优化的步骤之前还执行:当不存在符合预设执行规则的查询节点时,再次从根节点开始遍历查询树,判断是否存在执行成本不超过预设执行成本的查询节点;当存在执行成本不超过预设执行成本的查询节点时,获取执行成本不超过预设执行成本的查询节点的查询数据作为当前查询数据。
在一个实施例中,当存在执行成本不超过预设执行成本的查询节点时,获取执行成本不超过预设执行成本的查询节点的查询数据作为当前查询数据,包括:获取查询节点对应的数据表的前N+1条查询记录,判断前N+1条查询记录中目标数据的数目是否超过N,其中,N为预设阈值;若否,则判定查询节点为执行成本不超过预设执行成本的查询节点。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,该计算机程序可存储于一非易失性计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)等。
以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。
Claims (10)
1.一种查询语句的优化方法,所述方法包括:
获取本次查询对应的查询语句,根据所述查询语句得到查询树;
从所述查询树的根节点开始遍历所述查询树的查询节点,当存在符合预设执行规则的查询节点时,获取所述符合预设执行规则的查询节点对应的查询数据作为当前查询数据;
当所述当前查询数据中存在关联属性值时,提取所述关联属性值作为优化条件推送至所述关联属性值对应的关联查询节点以对所述关联查询节点进行优化;
当所述关联属性值对应的关联查询节点存在未优化的关联查询节点时,获取所述关联属性值对应的关联查询节点的查询数据,根据所述查询数据判断所述关联属性值对应的关联查询节点的执行成本是否超过预设执行成本;
若否,则将所述关联属性值对应的关联查询节点的查询数据作为当前查询数据,进入所述当所述当前查询数据中存在关联属性值时,提取所述关联属性值作为优化条件推送至所述关联属性值对应的关联查询节点以对所述关联查询节点进行优化的步骤直至所述关联属性值对应的关联查询节点不存在未优化的关联查询节点。
2.根据权利要求1所述的方法,其特征在于,获取本次查询对应的查询语句,根据所述查询语句得到查询树的步骤之后包括:
获取垂直分库信息,根据所述垂直分库信息判断所述查询树对应的数据表集合中是否存在属于相同数据库的数据表;
若存在,则将所述属于相同数据库的数据表对应的查询节点进行合并。
3.根据权利要求1所述的方法,其特征在于,所述当所述当前查询数据中存在关联属性值时,提取所述关联属性值作为优化条件推送至所述关联属性值对应的关联查询节点以对所述关联查询节点进行优化的步骤包括:
判断所述查询节点是否包含主键查询条件;
若是,则判定所述查询节点为符合预设执行规则的查询节点。
4.根据权利要求1所述的方法,其特征在于,所述当所述当前查询数据中存在关联属性值时,提取所述关联属性值作为优化条件推送至所述关联属性值对应的关联查询节点以对所述关联查询节点进行优化的步骤之前还包括:
当不存在符合预设执行规则的查询节点时,再次从所述根节点开始遍历所述查询树,判断是否存在执行成本不超过预设执行成本的查询节点;
当存在执行成本不超过预设执行成本的查询节点时,获取所述执行成本不超过预设执行成本的查询节点的查询数据作为当前查询数据。
5.根据权利要求4所述的方法,其特征在于,所述当存在执行成本不超过预设执行成本的查询节点时,获取所述执行成本不超过预设执行成本的查询节点的查询数据作为当前查询数据的步骤包括:
获取所述查询节点对应的数据表的前N+1条查询记录,判断所述前N+1条查询记录中目标数据的数目是否超过N,其中,N为预设阈值;
若否,则判定所述查询节点为执行成本不超过预设执行成本的查询节点。
6.一种查询语句的优化装置,其特征在于,所述装置包括:
查询树生成模块,用于获取本次查询对应的查询语句,根据所述查询语句得到查询树;
查询数据获取模块,用于从所述查询树的根节点开始遍历所述查询树的查询节点,当存在符合预设执行规则的查询节点时,获取所述符合预设执行规则的查询节点对应的查询数据作为当前查询数据;
优化条件推送模块,用于当所述当前查询数据中存在关联属性值时,提取所述关联属性值作为优化条件推送至所述关联属性值对应的关联查询节点以对所述关联查询节点进行优化;
执行成本判断模块,用于当所述关联属性值对应的关联查询节点存在未优化的关联查询节点时,获取所述关联属性值对应的关联查询节点的查询数据,根据所述查询数据判断所述关联属性值对应的关联查询节点的执行成本是否超过预设执行成本;
循环模块,用于若否,则将所述关联属性值对应的关联查询节点的查询数据作为当前查询数据,进入所述当所述当前查询数据中存在关联属性值时,提取所述关联属性值作为优化条件推送至所述关联属性值对应的关联查询节点以对所述关联查询节点进行优化的步骤直至所述关联属性值对应的关联查询节点不存在未优化的关联查询节点。
7.根据权利要求6所述的装置,其特征在于,所述装置还包括:
垂直分库信息获取模块,用于获取垂直分库信息,根据所述垂直分库信息判断所述查询树对应的数据表集合中是否存在属于相同数据库的数据表;
查询节点合并模块,用于若存在,则将所述属于相同数据库的数据表对应的查询节点进行合并。
8.根据权利要求6所述的装置,其特征在于,所述查询数据获取模块包括:
主键查询条件判断模块,用于判断所述查询节点是否包含主键查询条件;
判定模块,用于若是,则判定所述查询节点为符合预设执行规则的查询节点。
9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1至5中任一项所述的查询语句的优化方法。
10.一种计算机设备,所述计算机设备包括存储器,处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至5中任一项所述的查询语句的优化方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711435768.1A CN108197187B (zh) | 2017-12-26 | 2017-12-26 | 查询语句的优化方法、装置、存储介质和计算机设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711435768.1A CN108197187B (zh) | 2017-12-26 | 2017-12-26 | 查询语句的优化方法、装置、存储介质和计算机设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108197187A CN108197187A (zh) | 2018-06-22 |
CN108197187B true CN108197187B (zh) | 2020-06-16 |
Family
ID=62584348
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711435768.1A Active CN108197187B (zh) | 2017-12-26 | 2017-12-26 | 查询语句的优化方法、装置、存储介质和计算机设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108197187B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111666321B (zh) * | 2019-03-05 | 2024-01-05 | 百度在线网络技术(北京)有限公司 | 多数据源的操作方法及其装置 |
CN110688393B (zh) * | 2019-09-29 | 2021-01-29 | 星环信息科技(上海)股份有限公司 | 查询语句优化方法、装置、计算机设备及存储介质 |
CN112749189A (zh) * | 2019-10-29 | 2021-05-04 | 北京国双科技有限公司 | 数据查询方法及装置 |
CN113722600B (zh) * | 2021-09-06 | 2024-04-26 | 阿波罗智联(北京)科技有限公司 | 应用于大数据的数据查询方法、装置、设备及产品 |
CN114706846A (zh) * | 2021-12-31 | 2022-07-05 | 北京大学 | 查询数据的方法、装置、设备及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2000074397A1 (en) * | 1999-06-02 | 2000-12-07 | Accenture Llp | System, method and device for roaming subscriber registration |
US6678672B1 (en) * | 2000-05-31 | 2004-01-13 | Ncr Corporation | Efficient exception handling during access plan execution in an on-line analytic processing system |
CN105138674A (zh) * | 2015-09-08 | 2015-12-09 | 成都博元科技有限公司 | 一种数据库访问方法 |
CN107102995A (zh) * | 2016-02-19 | 2017-08-29 | 华为技术有限公司 | 一种sql执行计划的确定方法及装置 |
-
2017
- 2017-12-26 CN CN201711435768.1A patent/CN108197187B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2000074397A1 (en) * | 1999-06-02 | 2000-12-07 | Accenture Llp | System, method and device for roaming subscriber registration |
US6678672B1 (en) * | 2000-05-31 | 2004-01-13 | Ncr Corporation | Efficient exception handling during access plan execution in an on-line analytic processing system |
CN105138674A (zh) * | 2015-09-08 | 2015-12-09 | 成都博元科技有限公司 | 一种数据库访问方法 |
CN107102995A (zh) * | 2016-02-19 | 2017-08-29 | 华为技术有限公司 | 一种sql执行计划的确定方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN108197187A (zh) | 2018-06-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108197187B (zh) | 查询语句的优化方法、装置、存储介质和计算机设备 | |
CN105786808B (zh) | 一种用于分布式执行关系型计算指令的方法与设备 | |
US10769147B2 (en) | Batch data query method and apparatus | |
KR102230661B1 (ko) | Sql 검토 방법, 장치, 서버 및 저장 매체 | |
CN106202207B (zh) | 一种基于HBase-ORM的索引及检索系统 | |
US9652498B2 (en) | Processing queries using hybrid access paths | |
WO2016011904A1 (zh) | 数据库访问方法及装置、数据库系统 | |
CN111324577B (zh) | 一种Yml文件读写的方法及装置 | |
JP7098327B2 (ja) | 情報処理システム、関数作成方法および関数作成プログラム | |
US11481440B2 (en) | System and method for processing metadata to determine an object sequence | |
CN107239468B (zh) | 任务节点管理方法及装置 | |
CN108776678B (zh) | 基于移动端NoSQL数据库的索引创建方法及装置 | |
US11573987B2 (en) | System for detecting data relationships based on sample data | |
US9960983B2 (en) | Monitoring item selection method and device, and storage medium | |
CN110019384A (zh) | 一种血缘数据的获取方法、提供血缘数据的方法及装置 | |
CN108776660B (zh) | 一种基于ArcGIS的批量匹配道路属性的方法 | |
CN108073641B (zh) | 查询数据表的方法和装置 | |
US20160357844A1 (en) | Database apparatus, search apparatus, method of constructing partial graph, and search method | |
CN110990423B (zh) | Sql语句的执行方法、装置、设备和存储介质 | |
US9881055B1 (en) | Language conversion based on S-expression tabular structure | |
CN110765073B (zh) | 分布式存储系统的文件管理方法、介质、设备及装置 | |
CN106844553A (zh) | 基于样本数据的数据探测和扩充方法及装置 | |
CN109101595B (zh) | 一种信息查询方法、装置、设备及计算机可读存储介质 | |
US10430393B2 (en) | Generating a database structure from a scanned drawing | |
US9959295B1 (en) | S-expression based computation of lineage and change impact analysis |
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 |