[发明专利]一种数据库操作方法及设备在审
申请号: | 201310027266.0 | 申请日: | 2013-01-24 |
公开(公告)号: | CN103092970A | 公开(公告)日: | 2013-05-08 |
发明(设计)人: | 张仲良 | 申请(专利权)人: | 华为技术有限公司 |
主分类号: | G06F17/30 | 分类号: | G06F17/30;G06F9/44 |
代理公司: | 广州三环专利代理有限公司 44202 | 代理人: | 郝传鑫;熊永强 |
地址: | 518129 广东*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 数据库 操作方法 设备 | ||
技术领域
本发明涉及数据库领域,具体涉及一种数据库操作方法及设备。
背景技术
关系型数据库是建立在关系模型上的数据库,目前主要的关系型数据库产品有Oracle、DB2、SQL Server、PostgreSQL和MYSQL等。结构化查询语言(Srtuctured Query Language,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语句所绑定的执行计划,并且使能执行模块;
所述执行模块,用于执行所述执行计划并返回相应结果给客户端。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于华为技术有限公司,未经华为技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201310027266.0/2.html,转载请声明来源钻瓜专利网。