CN114116767A - 数据库sql查询语句转换方法及装置 - Google Patents
数据库sql查询语句转换方法及装置 Download PDFInfo
- Publication number
- CN114116767A CN114116767A CN202111424112.6A CN202111424112A CN114116767A CN 114116767 A CN114116767 A CN 114116767A CN 202111424112 A CN202111424112 A CN 202111424112A CN 114116767 A CN114116767 A CN 114116767A
- Authority
- CN
- China
- Prior art keywords
- query
- sql
- query expression
- expression
- preset
- 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.)
- Pending
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/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/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2246—Trees, e.g. B+trees
Abstract
本发明提供了一种数据库SQL查询语句转换方法,涉及数据库技术领域。所述方法包括:获取原始SQL查询表达式;根据预设转换规则将所述原始SQL查询表达式转换为目标SQL查询表达式;所述目标SQL查询表达式为对所述原始SQL查询表达式的执行条件进行效率优化之后的表达式;所述预设转换规则是基于SQL字符串转换的方式或者基于查询树转换的方式;根据所述目标SQL查询表达式生成执行计划。采用本方法能够提高客户端的SQL语句在数据库中的执行效率。
Description
技术领域
本发明涉及数据库技术领域,尤其涉及一种数据库SQL查询语句转换方法及装置。
背景技术
SQL(Structured Query Language,结构化查询语言)是一种数据库查询文本语言,用于存取数据以及查询、更新和管理关系数据库系统。在数据库的使用过程中,有对来自应用程序的SQL语句进行等价转换的需求。现有技术中应用程序的SQL执行效率不高,需要重写为一个等价的效率更高的SQL,但是在应用程序调用数据库中的数据时,不希望修改应用程序的代码。例如,业务系统对数据库进行查询时使用业务系统中原有的SQL查询语句可能由于数据量较大导致查询时间较久,所以就需要对原有的SQL查询语句进行转换,使其查询效率显著提高。因此,如何提高客户端的SQL语句在数据库中的执行效率是当前亟需解决的问题。
发明内容
为了解决上述技术问题或者至少部分地解决上述技术问题,本发明提供了一种数据库SQL查询语句转换方法,解决了客户端的SQL语句在数据库中执行效率低的问题。
为了实现上述目的,本发明实施例提供技术方案如下:
第一方面,本发明的实施例提供一种数据库SQL查询语句转换方法,所述方法包括:
获取原始SQL查询表达式;
根据预设转换规则将所述原始SQL查询表达式转换为目标SQL查询表达式;所述目标SQL查询表达式为对所述原始SQL查询表达式的执行条件进行效率优化之后的表达式;所述预设转换规则是基于SQL字符串转换的方式或者基于查询树转换的方式;
根据所述目标SQL查询表达式生成执行计划。
作为本发明实施例一种可选的实施方式,在根据预设转换规则将所述原始SQL查询表达式转换为目标SQL查询表达式之前,所述方法还包括:
创建预设转换规则;所述预设转换规则包括:规则标识、转换前的第一预设查询表达式以及转换后的第二预设查询表达式;其中,所述规则标识为每条预设转换规则的唯一标识符;
根据所述预设转换规则生成查询转换规则表;
将所述第一预设查询表达式以及所述第二预设查询表达式均以查询树的数据结构存储在所述查询转换规则表中。
作为本发明实施例一种可选的实施方式,根据规则标识对所述预设转换规则进行维护处理;其中,维护处理的方法包括:创建规则、删除规则、使规则失效以及激活失效规则。
作为本发明实施例一种可选的实施方式,所述根据预设转换规则将所述原始SQL查询表达式转换为目标SQL查询表达式,包括:
检测所述原始SQL查询表达式的SQL字符串是否与第一预设查询表达式的SQL字符串匹配;
若匹配,则将所述原始SQL查询表达式转换为目标SQL查询表达式。
作为本发明实施例一种可选的实施方式,所述根据预设转换规则将所述原始SQL查询表达式转换为目标SQL查询表达式,包括:
根据数据库解析器将所述原始SQL查询表达式解析为待转换查询树;
检测所述待转换查询树与所述第一预设查询表达式对应的查询树是否一致;
若一致,则根据所述第二预设查询表达式对应的查询树将所述待转换查询树转换生成目标SQL查询树;
根据所述目标SQL查询树获取目标SQL查询表达式。
作为本发明实施例一种可选的实施方式,所述检测所述待转换查询树与所述第一预设查询表达式对应的查询树是否一致,包括:
检测所述待转换查询树的节点属性是否与所述第一预设查询表达式对应的查询树的节点属性一致;所述节点属性包括除参数型节点之外的其余节点类型以及节点参数;所述参数型节点的节点类型为参数型,节点参数为常量类型。
作为本发明实施例一种可选的实施方式,根据映射查询参数的状态确定是否对所述原始SQL查询表达式进行转换;所述映射查询参数的状态包括:全部查询、部分查询以及关闭查询;
若所述映射查询参数的状态为全部查询,则根据预设转换规则将所述原始SQL查询表达式转换为目标SQL查询表达式;
若所述映射查询参数的状态为部分查询,则根据预设转换规则将所述原始SQL查询表达式的子查询表达式转换为目标SQL子查询表达式;
若所述映射查询参数的状态为关闭查询,则根据所述原始SQL查询表达式生成执行计划。
第二方面,本发明实施例提供一种数据库SQL查询语句转换装置,包括:
获取模块,用于获取原始SQL查询表达式;
转换模块,用于根据预设转换规则将所述原始SQL查询表达式转换为目标SQL查询表达式;所述目标SQL查询表达式为对所述原始SQL查询表达式的执行条件进行效率优化之后的表达式;所述预设转换规则是基于SQL字符串转换的方式或者基于查询树转换的方式;
执行模块,用于根据所述目标SQL查询表达式生成执行计划。
作为本发明实施例一种可选的实施方式,所述数据库SQL查询语句转换装置,还包括:
创建模块,用于创建预设转换规则;所述预设转换规则包括:规则标识、转换前的第一预设查询表达式以及转换后的第二预设查询表达式;其中,所述规则标识为每条预设转换规则的唯一标识符;
生成模块,用于根据所述预设转换规则生成查询转换规则表;
存储模块,用于将所述第一预设查询表达式以及所述第二预设查询表达式均以查询树的数据结构存储在所述查询转换规则表中。
作为本发明实施例一种可选的实施方式,所述数据库SQL查询语句转换装置,还包括:
维护模块,用于根据规则标识对所述预设转换规则进行维护处理;其中,维护处理的方法包括:创建规则、删除规则、使规则失效以及激活失效规则。
作为本发明实施例一种可选的实施方式,所述转换模块具体用于:
检测所述原始SQL查询表达式的SQL字符串是否与第一预设查询表达式的SQL字符串匹配;
若匹配,则将所述原始SQL查询表达式转换为目标SQL查询表达式。
作为本发明实施例一种可选的实施方式,所述转换模块具体用于:
根据数据库解析器将所述原始SQL查询表达式解析为待转换查询树;
检测所述待转换查询树与所述第一预设查询表达式对应的查询树是否一致;
若一致,则根据所述第二预设查询表达式对应的查询树将所述待转换查询树转换生成目标SQL查询树;
根据所述目标SQL查询树获取目标SQL查询表达式。
作为本发明实施例一种可选的实施方式,所述检测所述待转换查询树与所述第一预设查询表达式对应的查询树是否一致,包括:
检测所述待转换查询树的节点属性是否与所述第一预设查询表达式对应的查询树的节点属性一致;所述节点属性包括除参数型节点之外的其余节点类型以及节点参数;所述参数型节点的节点类型为参数型,节点参数为常量类型。
作为本发明实施例一种可选的实施方式,所述数据库SQL查询语句转换装置,还包括控制转换模块,所述控制转换模块用于:
根据映射查询参数的状态确定是否对所述原始SQL查询表达式进行转换;所述映射查询参数的状态包括:全部查询、部分查询以及关闭查询;
若所述映射查询参数的状态为全部查询,则根据预设转换规则将所述原始SQL查询表达式转换为目标SQL查询表达式;
若所述映射查询参数的状态为部分查询,则根据预设转换规则将所述原始SQL查询表达式的子查询表达式转换为目标SQL子查询表达式;
若所述映射查询参数的状态为关闭查询,则根据所述原始SQL查询表达式生成执行计划。
第三方面,本发明实施例提供一种电子设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现上述第一方面或第一方面的任一实施方式所述的数据库SQL查询语句转换方法。
第四方面,本申请实施例提供一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现上述第一方面或第一方面的任一实施方式所述的数据库SQL查询语句转换方法。
本发明实施例提供的数据库SQL查询语句转换方法,应用于数据库服务器,首先获取原始SQL查询表达式,然后根据预设转换规则将原始SQL查询表达式转换为目标SQL查询表达式,再根据目标SQL查询表达式生成执行计划。由于对原始SQL查询表达式的执行条件进行效率优化之后生成目标SQL查询表达式,所以目标SQL查询表达式的执行效率高于原始SQL查询表达式,因此在数据库服务器实现SQL转换的功能,从而能够提高客户端的SQL语句在数据库中的执行效率,减少SQL语句的执行时间。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为一个实施例中数据库SQL查询语句转换方法的流程示意图;
图2为另一个实施例中数据库SQL查询语句转换方法的流程示意图;
图3为一个实施例中数据库SQL查询语句转换装置的结构示意图;
图4为本发明实施例所述的电子设备的结构示意图。
具体实施方式
为了能够更清楚地理解本发明的上述目的、特征和优点,下面将对本发明的方案进行进一步描述。需要说明的是,在不冲突的情况下,本发明的实施例及实施例中的特征可以相互组合。
在下面的描述中阐述了很多具体细节以便于充分理解本公开,但本发明还可以采用其他不同于在此描述的方式来实施;显然,说明书中的实施例只是本发明的一部分实施例,而不是全部的实施例。
本发明的说明书和权利要求书中的术语“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。
在本发明实施例中,“示例性的”或者“例如”等词是用于表示作例子、例证或说明。本发明实施例中被描述为“示例性的”或者“例如”的任何实施例或设计方案不应被解释为比其它实施例或设计方案更优选或更具优势。确切而言,使用“示例性的”或者“例如”等词旨在以具体方式呈现相关概念。此外,在本发明实施例的描述中,除非另有说明,“多个”的含义是指两个或两个以上。
本发明实施例的整体构思为:通过在数据库中配置源SQL语句到目标SQL语句的映射关系,然后数据库在处理客户端的SQL查询语句时,可以将输入的SELECT、INSERT、UPDATE、DELETE等语句,与获取的源SQL语句进行参数无关的匹配,同时提取参数值,如果发现匹配,则自动将语句映射到目标语句,并做参数替换;如果未发现匹配,则不做转换,从而在数据库实现SQL转换的功能,提高执行效率。
在一个实施例中,如图1所示,提供一种数据库SQL查询语句转换方法,应用于数据库服务器,包括如下步骤:
S11、获取原始SQL查询表达式。
具体的,原始SQL查询表达式是客户端的应用程序发送的。在实际的应用程序查询数据时,SQL语句不仅逻辑复杂,且较为冗长,数据库的数据需要满足多个查询条件时才返回给应用程序。
S12、根据预设转换规则将所述原始SQL查询表达式转换为目标SQL查询表达式。
其中,所述目标SQL查询表达式为对所述原始SQL查询表达式的执行条件进行效率优化之后的表达式。所述预设转换规则是基于SQL字符串转换的方式或者基于查询树转换的方式。
示例性的,一条原始SQL语句如果用来从一个10万条记录的表中查1条记录,使用原始SQL语句查询时可能按照查询条件依次进行查找,这种方式处理效率较慢。通过预设转换规则对原始SQL语句的查询条件进行重整或者结合,获取目标SQL语句;例如,可以首先统计10万条记录符合某个条件的语句位于多少张表中,然后按照分组的方式统计每张表中符合条件的数据条数,最后获取到要查找的记录,这种方式能够改变原始查询方案,提高原始SQL语句执行效率。
S13、根据所述目标SQL查询表达式生成执行计划。
具体的,执行计划(execution plan,也叫查询计划或者解释计划)是数据库执行SQL语句的具体步骤,例如通过索引还是全表扫描访问表中的数据,连接查询的实现方式和连接的顺序等。执行计划也可以理解为是数据库根据SQL语句和相关表的统计信息做出的一个查询方案,这个方案是由查询优化器自动分析产生的。
本发明实施例提供的数据库SQL查询语句转换方法,应用于数据库服务器,首先获取原始SQL查询表达式,然后根据预设转换规则将原始SQL查询表达式转换为目标SQL查询表达式,再根据目标SQL查询表达式生成执行计划。由于对原始SQL查询表达式的执行条件进行效率优化之后生成目标SQL查询表达式,所以目标SQL查询表达式的执行效率高于原始SQL查询表达式,因此在数据库服务器实现SQL转换的功能,从而能够提高客户端的SQL语句在数据库中的执行效率,减少SQL语句的执行时间。
在一个实施例中,在图1所示步骤的基础上,参照图2所示,执行上述步骤S12之前还可以执行如下步骤:
S101、创建预设转换规则。
其中,所述预设转换规则包括:规则标识、转换前的第一预设查询表达式以及转换后的第二预设查询表达式。
具体的,创建预设转换规则的必要参数是规则标识,规则标识为创建的每条预设转换规则的唯一标识符。预设转换规则的用途是:如果来自客户端的SQL语句匹配第一预设查询表达式,则将该SQL语句变换为第二预设查询表达式来生成执行计划并执行。
S102、根据所述预设转换规则生成查询转换规则表。
示例性的,查询转换规则表可以如表1所示。其中,表1中的Name1即规则标识,Query1即第一预设查询表达式,Query1即第一预设查询表达式。
另外,规则创建后存放在数据库的系统表中。系统表是关系型数据库管理系统存放结构元数据的地方,比如表和字段以及内部登记信息等。
表1
Name1 | Query1 | Query2 |
··· | ··· | ··· |
S103、将所述第一预设查询表达式以及所述第二预设查询表达式均以查询树的数据结构存储在所述查询转换规则表中。
在实现上,在创建预设转换规则时,首先对第一预设查询表达式以及第二预设查询表达式进行词法、语法和语义分析,将其对应的SQL语句转换为数据库内部的查询树,然后将查询树作为规则存储在系统表中。
词法分析:从查询语句中识别出系统支持的关键字、标识符、操作符、终结符等,确定每个词自己固有的词性。其中,关键字有select、from、where等,标识符有用户自己定义的名字、常量名、变量名和过程名等,操作符如果是/*和--会识别为注释,常量类型包括数值型常量、字符串常量等。
语法分析:根据SQL语言的标准定义语法规则,使用词法分析中产生的词去匹配语法规则,如果一个SQL语句能够匹配一个语法规则,则生成对应的抽象语法树。
语义分析:对抽象语法树进行有效性检查,检查语法树中对应的表、列、函数、表达式是否有对应的元数据,将抽象语法树转换为查询树。
需要说明的是,在创建的查询树中也需要包含命名空间的信息,这样就可以保证该规则不影响其他命名空间的SQL语句。
具体的,命名空间是对作用域的一种特殊的抽象,通过将逻辑上的相关标识符构成相应的命名空间,可以使整个系统更加模块化。即,命名空间包含了处于该作用域内的标识符,且它本身也用一个标识符来表示,命名空间可以嵌套。
在一个实施例中,根据规则标识对所述预设转换规则进行维护处理。
其中,维护处理的方法包括:创建规则、删除规则、使规则失效以及激活失效规则。
具体的,创建规则的方法参数为规则标识,每次创建一条规则,对应一个唯一的规则标识。在创建规则时,同时将该规则的SQL中所依赖的对象取出,将规则和对象的映射关系存储。
删除规则的方法参数为规则标识,规则删除后,该规则对应的与对象的以来关系也删除。
使规则无效的方法参数为规则标识,在保留该规则的前提下使其无效。
激活规则方法使之前设置无效的规则生效,参数为规则标识。
作为本发明实施例一种可选的实施方式,上述步骤S12、根据预设转换规则将所述原始SQL查询表达式转换为目标SQL查询表达式的实现方式可以包括:
a、检测所述原始SQL查询表达式的SQL字符串是否与第一预设查询表达式的SQL字符串匹配。
具体的,数据库服务器收到SQL查询请求时,首先检查该SQL字符串是否匹配第一预设查询表达式的SQL字符串。
b、若匹配,则将所述原始SQL查询表达式转换为目标SQL查询表达式。
具体的,如果匹配则将该SQL按照转换规则转换为第二预设查询表达式,然后在进行词法语法分析。
示例性的,在定义规则时,可以定义参数为$n的格式,参数可以匹配任何其他参数和常量。例如,select$1可以匹配为select‘a’或select3。
通过在解析原始SQL查询表达式之前将SQL语句字符串按照预设转换规则转换为另一个SQL字符串,然后再参与SQL解析,执行计划生成等,采用这种方式不作词法、语法、语义的检查,执行效率高,但存在一定的错误率。
在一个实施例中,上述步骤S12、根据预设转换规则将所述原始SQL查询表达式转换为目标SQL查询表达式的实现方式可以包括:
(1)、根据数据库解析器将所述原始SQL查询表达式解析为待转换查询树。
具体的,数据库服务器收到SQL查询请求时,会首先进行词法、语法、语义分析,将SQL语句解析为数据库内部的查询树。
(2)、检测所述待转换查询树与所述第一预设查询表达式对应的查询树是否一致。
具体的,检测所述待转换查询树的节点属性是否与所述第一预设查询表达式对应的查询树的节点属性一致。
其中,所述节点属性包括除参数型节点之外的其余节点类型以及节点参数;所述参数型节点的节点类型为参数型,节点参数为常量类型。
可以理解的是,两个查询树匹配,是指查询树的每个节点,除了参数节点,其他节点都相同。参数节点可以匹配任何常数和其他参数型节点。示例性的,来自客户端的SQL为select 2,$1from a where id=$2。规则为:select 2,$1from a where id=12。
需要说明的是,为实现该匹配功能,在做两个查询树比较时,判断每个对应节点,当该节点的类型不是参数节点时,则要求对应节点的类型和参数都相同;当规则中用于匹配的查询树中的节点为参数型节点时,要求输入的节点为常量节点或参数节点。
(3)、若一致,则根据所述第二预设查询表达式对应的查询树将所述待转换查询树转换生成目标SQL查询树。
具体的,将SQL解析为查询树后,会在查询规则表中进行查找,当找到和输入模式匹配的规则时,则将输入的查询树替换为规则中定义的查询树。
(4)、根据所述目标SQL查询树获取目标SQL查询表达式。
在本实施例中,需要在产生执行计划之前,将查询树进行替换。
通过将SQL解析后产生的内部查询树数据按照用户定义的规则转换为另一种查询树的方法,可以同时兼顾SQL转换过程中的效率以及正确率,采用本方法,能够在数据库端实现SQL转换的功能,并且保证转换后的SQL语法语义是正确的。同时该方法能够区分不同的命名空间,避免在一个数据库的命名空间定义的转换规则影响到其他相同命名空间的SQL语句。
在一个实施例中,根据映射查询参数的状态确定是否对所述原始SQL查询表达式进行转换。
其中,所述映射查询参数的状态包括:全部查询、部分查询以及关闭查询。
1)若所述映射查询参数的状态为全部查询,则根据预设转换规则将所述原始SQL查询表达式转换为目标SQL查询表达式。
2)若所述映射查询参数的状态为部分查询,则根据预设转换规则将所述原始SQL查询表达式的子查询表达式转换为目标SQL子查询表达式。
具体的,子查询可以理解为一条select语句的结果作为另一条select语法的一部分(查询条件,查询结果,表等)。
3)若所述映射查询参数的状态为关闭查询,则根据所述原始SQL查询表达式生成执行计划。
示例性的,可以定义参数query_mapping=SQL|BLOCK|OFF。当为SQL时,仅支持整个语句块的替换;当为BLOCK时,可以对SQL语句中的部分子查询进行替换;当为OFF时,该功能关闭,即使数据库中定义了转化规则,也不再对客户端发的SQL查询请求进行转换。
本发明实施例提供的数据库SQL查询语句转换方法,应用于数据库服务器,首先获取原始SQL查询表达式,然后根据预设转换规则将原始SQL查询表达式转换为目标SQL查询表达式,再根据目标SQL查询表达式生成执行计划。由于对原始SQL查询表达式的执行条件进行效率优化之后生成目标SQL查询表达式,所以目标SQL查询表达式的执行效率高于原始SQL查询表达式,因此在数据库服务器实现SQL转换的功能,从而能够提高客户端的SQL语句在数据库中的执行效率,减少SQL语句的执行时间。
在一个实施例中,如图3所示,提供了一种数据库SQL查询语句转换装置,包括:
获取模块310,用于获取原始SQL查询表达式;
转换模块320,用于根据预设转换规则将所述原始SQL查询表达式转换为目标SQL查询表达式;所述目标SQL查询表达式为对所述原始SQL查询表达式的执行条件进行效率优化之后的表达式;所述预设转换规则是基于SQL字符串转换的方式或者基于查询树转换的方式;
执行模块330,用于根据所述目标SQL查询表达式生成执行计划。
作为本发明实施例一种可选的实施方式,所述数据库SQL查询语句转换装置,还包括:
创建模块,用于创建预设转换规则;所述预设转换规则包括:规则标识、转换前的第一预设查询表达式以及转换后的第二预设查询表达式;其中,所述规则标识为每条预设转换规则的唯一标识符;
生成模块,用于根据所述预设转换规则生成查询转换规则表;
存储模块,用于将所述第一预设查询表达式以及所述第二预设查询表达式均以查询树的数据结构存储在所述查询转换规则表中。
作为本发明实施例一种可选的实施方式,所述数据库SQL查询语句转换装置,还包括:
维护模块,用于根据规则标识对所述预设转换规则进行维护处理;其中,维护处理的方法包括:创建规则、删除规则、使规则失效以及激活失效规则。
作为本发明实施例一种可选的实施方式,所述转换模块320具体用于:
检测所述原始SQL查询表达式的SQL字符串是否与第一预设查询表达式的SQL字符串匹配;
若匹配,则将所述原始SQL查询表达式转换为目标SQL查询表达式。
作为本发明实施例一种可选的实施方式,所述转换模块320具体用于:
根据数据库解析器将所述原始SQL查询表达式解析为待转换查询树;
检测所述待转换查询树与所述第一预设查询表达式对应的查询树是否一致;
若一致,则根据所述第二预设查询表达式对应的查询树将所述待转换查询树转换生成目标SQL查询树;
根据所述目标SQL查询树获取目标SQL查询表达式。
作为本发明实施例一种可选的实施方式,所述检测所述待转换查询树与所述第一预设查询表达式对应的查询树是否一致,包括:
检测所述待转换查询树的节点属性是否与所述第一预设查询表达式对应的查询树的节点属性一致;所述节点属性包括除参数型节点之外的其余节点类型以及节点参数;所述参数型节点的节点类型为参数型,节点参数为常量类型。
作为本发明实施例一种可选的实施方式,所述数据库SQL查询语句转换装置,还包括控制转换模块,所述控制转换模块用于:
根据映射查询参数的状态确定是否对所述原始SQL查询表达式进行转换;所述映射查询参数的状态包括:全部查询、部分查询以及关闭查询;
若所述映射查询参数的状态为全部查询,则根据预设转换规则将所述原始SQL查询表达式转换为目标SQL查询表达式;
若所述映射查询参数的状态为部分查询,则根据预设转换规则将所述原始SQL查询表达式的子查询表达式转换为目标SQL子查询表达式;
若所述映射查询参数的状态为关闭查询,则根据所述原始SQL查询表达式生成执行计划。
本发明实施例提供的数据库SQL查询语句转换方法,应用于数据库服务器,首先获取原始SQL查询表达式,然后根据预设转换规则将原始SQL查询表达式转换为目标SQL查询表达式,再根据目标SQL查询表达式生成执行计划。由于对原始SQL查询表达式的执行条件进行效率优化之后生成目标SQL查询表达式,所以目标SQL查询表达式的执行效率高于原始SQL查询表达式,因此在数据库服务器实现SQL转换的功能,从而能够提高客户端的SQL语句在数据库中的执行效率,减少SQL语句的执行时间。
本发明实施例还提供了一种电子设备,图4为本发明实施例提供的电子设备的结构示意图。如图4所示,本实施例提供的设备包括:存储器41和处理器42,存储器41用于存储计算机程序;处理器42用于调用计算机程序时执行上述方法实施例提供的数据库SQL查询语句转换方法中任一实施例所执行的步骤。
本领域技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质上实施的计算机程序产品的形式。
处理器可以是中央判断单元(CentralProcessingUnit,CPU),还可以是其他通用处理器、数字信号处理器(DigitalSignalProcessor,DSP)、专用集成电路(ApplicationSpecificIntegratedCircuit,ASIC)、现成可编程门阵列(Field-ProgrammableGateArray,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flashRAM)。存储器是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动存储介质。存储介质可以由任何方法或技术来实现信息存储,信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。根据本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述仅是本公开的具体实施方式,使本领域技术人员能够理解或实现本公开。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所述的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (10)
1.一种数据库SQL查询语句转换方法,其特征在于,应用于数据库服务器,所述方法包括:
获取原始SQL查询表达式;
根据预设转换规则将所述原始SQL查询表达式转换为目标SQL查询表达式;所述目标SQL查询表达式为对所述原始SQL查询表达式的执行条件进行效率优化之后的表达式;所述预设转换规则是基于SQL字符串转换的方式或者基于查询树转换的方式;
根据所述目标SQL查询表达式生成执行计划。
2.根据权利要求1所述的方法,其特征在于,在根据预设转换规则将所述原始SQL查询表达式转换为目标SQL查询表达式之前,所述方法还包括:
创建预设转换规则;所述预设转换规则包括:规则标识、转换前的第一预设查询表达式以及转换后的第二预设查询表达式;其中,所述规则标识为每条预设转换规则的唯一标识符;
根据所述预设转换规则生成查询转换规则表;
将所述第一预设查询表达式以及所述第二预设查询表达式均以查询树的数据结构存储在所述查询转换规则表中。
3.根据权利要求2所述的方法,其特征在于,所述方法还包括:
根据规则标识对所述预设转换规则进行维护处理;其中,维护处理的方法包括:创建规则、删除规则、使规则失效以及激活失效规则。
4.根据权利要求1至2任一项所述的方法,其特征在于,所述根据预设转换规则将所述原始SQL查询表达式转换为目标SQL查询表达式,包括:
检测所述原始SQL查询表达式的SQL字符串是否与第一预设查询表达式的SQL字符串匹配;
若匹配,则将所述原始SQL查询表达式转换为目标SQL查询表达式。
5.根据权利要求1至2任一项所述的方法,其特征在于,所述根据预设转换规则将所述原始SQL查询表达式转换为目标SQL查询表达式,包括:
根据数据库解析器将所述原始SQL查询表达式解析为待转换查询树;
检测所述待转换查询树与所述第一预设查询表达式对应的查询树是否一致;
若一致,则根据所述第二预设查询表达式对应的查询树将所述待转换查询树转换生成目标SQL查询树;
根据所述目标SQL查询树获取目标SQL查询表达式。
6.根据权利要求5所述的方法,其特征在于,所述检测所述待转换查询树与所述第一预设查询表达式对应的查询树是否一致,包括:
检测所述待转换查询树的节点属性是否与所述第一预设查询表达式对应的查询树的节点属性一致;所述节点属性包括除参数型节点之外的其余节点类型以及节点参数;所述参数型节点的节点类型为参数型,节点参数为常量类型。
7.根据权利要求1所述的方法,其特征在于,所述方法还包括:
根据映射查询参数的状态确定是否对所述原始SQL查询表达式进行转换;所述映射查询参数的状态包括:全部查询、部分查询以及关闭查询;
若所述映射查询参数的状态为全部查询,则根据预设转换规则将所述原始SQL查询表达式转换为目标SQL查询表达式;
若所述映射查询参数的状态为部分查询,则根据预设转换规则将所述原始SQL查询表达式的子查询表达式转换为目标SQL子查询表达式;
若所述映射查询参数的状态为关闭查询,则根据所述原始SQL查询表达式生成执行计划。
8.一种数据库SQL查询语句转换装置,其特征在于,包括:
获取模块,用于获取原始SQL查询表达式;
转换模块,用于根据预设转换规则将所述原始SQL查询表达式转换为目标SQL查询表达式;所述目标SQL查询表达式为对所述原始SQL查询表达式的执行条件进行效率优化之后的表达式;所述预设转换规则是基于SQL字符串转换的方式或者基于查询树转换的方式;
执行模块,用于根据所述目标SQL查询表达式生成执行计划。
9.一种电子设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至7中任一项所述的数据库SQL查询语句转换方法。
10.一种计算机可读存储介质,其特征在于,其上存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1至7中任一项所述的数据库SQL查询语句转换方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111424112.6A CN114116767A (zh) | 2021-11-26 | 2021-11-26 | 数据库sql查询语句转换方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111424112.6A CN114116767A (zh) | 2021-11-26 | 2021-11-26 | 数据库sql查询语句转换方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114116767A true CN114116767A (zh) | 2022-03-01 |
Family
ID=80370361
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111424112.6A Pending CN114116767A (zh) | 2021-11-26 | 2021-11-26 | 数据库sql查询语句转换方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114116767A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114996292A (zh) * | 2022-05-05 | 2022-09-02 | 北京联华信科技有限公司 | 执行计划自动变更方法、装置、设备及可读存储介质 |
WO2023246188A1 (zh) * | 2022-06-21 | 2023-12-28 | 华为云计算技术有限公司 | 一种数据共享方法及相关系统 |
-
2021
- 2021-11-26 CN CN202111424112.6A patent/CN114116767A/zh active Pending
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114996292A (zh) * | 2022-05-05 | 2022-09-02 | 北京联华信科技有限公司 | 执行计划自动变更方法、装置、设备及可读存储介质 |
CN114996292B (zh) * | 2022-05-05 | 2023-07-25 | 北京联华信科技有限公司 | 执行计划自动变更方法、装置、设备及可读存储介质 |
WO2023246188A1 (zh) * | 2022-06-21 | 2023-12-28 | 华为云计算技术有限公司 | 一种数据共享方法及相关系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11481439B2 (en) | Evaluating XML full text search | |
US8612468B2 (en) | System and method for retrieving data from a relational database management system | |
EP2652645B1 (en) | Extensible rdf databases | |
Mena et al. | OBSERVER: An approach for query processing in global information systems based on interoperation across pre-existing ontologies | |
US8719250B2 (en) | Integrating RDF data into a relational database system | |
US7680862B2 (en) | Rewriting table functions as SQL strings | |
US20080140696A1 (en) | System and method for analyzing data sources to generate metadata | |
US20210209098A1 (en) | Converting database language statements between dialects | |
JP3914662B2 (ja) | データベース処理方法及び実施装置並びにその処理プログラムを記憶した媒体 | |
CN101021875A (zh) | 面向对象的数据库访问方法及系统 | |
CN107291471B (zh) | 一种支持可定制化数据采集的元模型框架系统 | |
CN114116767A (zh) | 数据库sql查询语句转换方法及装置 | |
CN114625732A (zh) | 基于结构化查询语言sql的查询方法和系统 | |
CN112579610A (zh) | 多数据源结构分析方法、系统、终端设备及存储介质 | |
US9053207B2 (en) | Adaptive query expression builder for an on-demand data service | |
Heyvaert et al. | Conformance test cases for the RDF mapping language (RML) | |
Botoeva et al. | Ontology-based data access–Beyond relational sources | |
US20220222253A1 (en) | Sql statement generator | |
WO2016159819A1 (en) | System and method for data search in a graph database | |
CN116610694A (zh) | 一种基于列和访问语句关系的规则校验方法和系统 | |
Dvoretskyi et al. | Data Utility Assessment while Optimizing the Structure and Minimizing the Volume of a Distributed Database Node. | |
Ma et al. | Semantic web technologies and data management | |
Unbehauen et al. | SPARQL Update queries over R2RML mapped data sources | |
Ramanujam et al. | A relational wrapper for RDF reification | |
Lindvall et al. | A comparison of latency for MongoDB and PostgreSQL with a focus on analysis of source code |
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 |