一种数据库操作方法及设备的制作方法

文档序号:6398494阅读:135来源:国知局
专利名称:一种数据库操作方法及设备的制作方法
技术领域
本发明涉及数据库领域,具体涉及一种数据库操作方法及设备。
背景技术
关系型数据库是建立在关系模型上的数据库,目前主要的关系型数据库产品有Oracle、DB2、SQL Server、PostgreSQL 和 MYSQL 等。结构化查询语言(Srtuctured QueryLanguage, SQL)是各种关系型数据库的主要用户程序接口语言,用户程序可以通过SQL实现对各种关系型数据库中的数据的查询、插入、删除、更新等操作,本文中将这些操作统称为对数据库的操作。SQL文本被嵌入在使用各种宿主语言(如C、C++、Java、Pathon等)编写的用户程序(源文件)中。目前,利用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文本之前绑定所述预定义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是本发明实施例提供的一种数据库操作方法的流程图;图2是本发明实施例提供的另一种数据库操作方法的流程图;图3是本发明实施例提供的一种数据库操作设备的结构图;图4是本发明实施例提供的另一种数据库操作设备的结构图;图5是本发明实施例提供的再一种数据库操作设备的结构图;图6是本发明实施例提供的又一种数据库操作设备的结构图;图7是本发明实施例提供的一种数据库操作设备的结构图。
具体实施例方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。动态SQL的用户程序采用纯宿主语言编写,用户程序每次被调用,程序中的SQL文本被发送给数据库,数据库存对其进行编译,生成相应执行计划,如下程序I为采用Java语言编写的采用动态SQL的用户程序片段:程序1:
权利要求
1.一种数据库操作方法,其特征在于,包括: 接收结构化查询语言SQL文本; 判断所述SQL文本中的SQL语句是否为预定义SQL语法中的预定义SQL语句,其中,所述预定义SQL语法中的预定义SQL语句与原SQL语法中的相应的原SQL语句对应相同的执行计划; 若所述SQL语句是预定义SQL语法中的预定义SQL语句,则从预定义SQL语句与执行计划的对应关系表中查询所述预定义SQL语句所绑定的执行计划; 执行所述执行计划并返回相应结果给客户端。
2.根据权利要求1所述的方法,其特征在于,所述判断所述SQL文本中的SQL语句是否为预定义SQL语法中的预定义SQL语句包括: 判断所述SQL语句是否包含预定义SQL语法标识符; 若所述SQL语句包含预定义SQL语法标识符,则确定所述SQL语句为预定义SQL语法中的预定义SQL语句。
3.根据权利要求1或2所述的方法,其特征在于,在所述接收结构化查询语言SQL文本之前,所述方法还包括: 绑定所述预定义SQL语法中的每条预定义SQL语句到原SQL语法中的相应的原SQL语句; 编译所述原SQL语句,生成相应的执行计划; 存储所述执行计划,并生 成预定义SQL语句与执行计划的对应关系表。
4.根据权利要求3所述的方法,其特征在于,在所述存储所述执行计划之前,所述方法还包括: 判断所述执行计划的执行效率是否低于历史执行计划的执行效率; 若所述执行计划的执行效率低于所述历史执行计划的执行效率,则恢复所述历史执行计划作为执行计划。
5.根据权利要求4所述的方法,其特征在于,所述方法还包括: 若所述SQL语句不是预定义SQL语法中的预定义SQL语句,则编译所述SQL语句,生成执行计划。
6.一种数据库操作设备,其特征在于,包括: 接收模块,用于接收结构化查询语言SQL文本,并且在接收到所述SQL文本后使能判断模块; 所述判断模块,用于判断所述接收模块接收到的所述SQL文本中的SQL语句是否为预定义SQL语法中的预定义SQL语句,并且在判断出所述SQL语句是预定义SQL语法中的预定义SQL语句时使能查询模块,其中,所述预定义SQL语法中的预定义SQL语句与原SQL语法中的相应的原SQL语句对应相同的执行计划; 所述查询模块,用于在所述判断模块判断出所述SQL语句是预定义SQL语法中的预定义SQL语句时,从预定义SQL语句与执行计划的对应关系表中查询所述预定义SQL语句所绑定的执行计划,并且使能执行模块; 所述执行模块,用于执行所述执行计划并返回相应结果给客户端。
7.根据权利要求6所述的设备,其特征在于,所述判断模块具体用于:判断所述SQL语句是否包含预定义SQL语法标识符; 在所述SQL语句包含预定义SQL语法标识符时,确定所述SQL语句为预定义SQL语法中的预定义SQL语句。
8.根据权利要求6或7所述的设备,其特征在于,所述设备还包括, 绑定模块,用于在所述接收模块接收结构化查询语言SQL文本之前绑定所述预定义SQL语法中的每条预定义SQL语句到原SQL语法中的相应的原SQL语句,并且使能编译模块; 所述编译模块,用于编译所述原SQL语句,生成相应的执行计划,并且使能存储模块; 所述存储模块,用于存储所述执行计划,并生成预定义SQL语句与执行计划的对应关系表,并且使能所述接收模块。
9.根据权利要求8所述的设备,其特征在于,所述设备还包括: 第二判断模块,用于在所述编译模块使能所述存储模块之前,判断所述执行计划的执行效率是否低于历史执行计划的执行效率,并且在判断出所述执行计划的执行效率低于历史执行计划的执行效率时使能历史计划恢复模块; 所述历史计划恢复模块,用于在所述编译模块使能所述存储模块之前,且在所述第二判断模块判断出所述执行计划的执行效率低于所述历史执行计划的执行效率时,恢复所述历史执行计划作为执行计划。
10.根据权利要求9所述的设备,其特征在于,所述设备还包括: 第二编译模块,用于在所述判断模块判断出所述SQL语句不是预定义SQL语法中的预定义SQL语句时,编译所述SQL语句,生成执行计划。
11.一种数据库操作设备,其特征在于,包括存储器和处理器,其中: 所述存储器用于存储一组程序代码,所述处理器用于从存储器中读取所述程序代码,执行: 接收结构化查询语言SQL文本; 判断所述SQL文本中的SQL语句是否为预定义SQL语法中的预定义SQL语句,其中,所述预定义SQL语法中的预定义SQL语句与原SQL语法中相应的原SQL语句所对应的执行计划是相同的; 若所述SQL语句是预定义SQL语法中的预定义SQL语句,则从预定义SQL语句与执行计划的对应关系表中查询所述预定义SQL语句所绑定的执行计划; 执行所述执行计划并返回相应结果给客户端。
12.根据权利要求11所述的设备,其特征在于,所述处理器执行所述判断所述SQL文本中的SQL语句是否为预定义SQL语法中的预定义SQL语句的具体方式为: 判断所述SQL语句是否包含预定义SQL语法标识符; 若所述SQL语句包含预定义SQL语法标识符,则确定所述SQL语句为预定义SQL语法中的预定义SQL语句。
13.根据权利要求11或12所述的设备,其特征在于,在所述接收结构化查询语言SQL文本之前,所述处理器还用于执行: 绑定所述预定义SQL语法中的每条预定义SQL语句到原SQL语法中的相应的原SQL语句;编译所述原SQL语句,生成相应的执行计划; 存储所述执行计划,并生成预定义SQL语句与执行计划的对应关系表。
14.根据权利要求13所述的设备,其特征在于,在所述存储所述执行计划之前,所述处理器还用于执行: 判断所述执行计划的执行效率是否低于历史执行计划的执行效率; 若所述执行计划的执行效率低于所述历史执行计划的执行效率,则恢复所述历史执行计划作为执行计划。
15.根据权利要求14所述的设备,其特征在于,所述处理器还用于执行: 在所述SQL语句不是预定义SQL语法中的预定义SQL语句时,编译所述SQL语句,生成执行计 划。
全文摘要
本发明实施例公开了一种数据库操作方法及设备,所述方法包括接收结构化查询语言SQL文本;判断SQL文本中的SQL语句是否为预定义SQL语法中的预定义SQL语句,其中,预定义SQL语法中的预定义SQL语句与原SQL语法中的相应的原SQL语句对应相同的执行计划;若SQL语句是预定义SQL语法中的预定义SQL语句,则从预定义SQL语句与执行计划的对应关系表中查询SQL语句所绑定的执行计划;执行该执行计划并返回相应结果给客户端。本发明提供的数据库查询方法,具有通用性且不会影响数据库系统的稳定性。
文档编号G06F9/44GK103092970SQ20131002726
公开日2013年5月8日 申请日期2013年1月24日 优先权日2013年1月24日
发明者张仲良 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1