一种数据库操作方法及设备技术

技术编号:8682850 阅读:136 留言:0更新日期:2013-05-09 02:46
本发明专利技术实施例公开了一种数据库操作方法及设备,所述方法包括:接收结构化查询语言SQL文本;判断SQL文本中的SQL语句是否为预定义SQL语法中的预定义SQL语句,其中,预定义SQL语法中的预定义SQL语句与原SQL语法中的相应的原SQL语句对应相同的执行计划;若SQL语句是预定义SQL语法中的预定义SQL语句,则从预定义SQL语句与执行计划的对应关系表中查询SQL语句所绑定的执行计划;执行该执行计划并返回相应结果给客户端。本发明专利技术提供的数据库查询方法,具有通用性且不会影响数据库系统的稳定性。

【技术实现步骤摘要】

本专利技术涉及数据库领域,具体涉及一种数据库操作方法及设备
技术介绍
关系型数据库是建立在关系模型上的数据库,目前主要的关系型数据库产品有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语句是预定义SQL语法中的预定义SQL语句,则从预定义SQL语句与执行计划的对应关系表中查询所述预定义SQL语句所绑定的执行计划;执行所述执行计划并返回相应结果给客户端。

【技术特征摘要】
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语法中...

【专利技术属性】
技术研发人员:张仲良
申请(专利权)人:华为技术有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1