一种SQL语句处理方法及装置转让专利

申请号 : CN201210361178.X

文献号 : CN102915344B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 丛磊王利俊郑志勇

申请人 : 新浪网技术(中国)有限公司

摘要 :

本发明公开了一种SQL语句处理方法及装置,包括:获取请求进行数据库处理操作的SQL语句;并对该SQL语句进行结构分析,得到分析结果;并根据分析结果,确定按照该SQL语句进行数据库处理操作时所表征的基准行数,基准行数为进行数据库处理操作时需要查询的数据行数;以及当确定的基准行数小于行数阈值时,确定按照该SQL语句进行数据库处理操作,否则,确定取消按照该SQL语句进行数据库处理操作。采用本发明实施例提供的方案,提高了数据库运行性能。

权利要求 :

1.一种结构化查询语言SQL语句处理方法,其特征在于,包括:

获取请求进行数据库处理操作的SQL语句;

对所述SQL语句进行结构分析,得到分析结果,具体包括:对所述SQL语句进行结构分析,确定所述SQL语句包括的各子语句块的类型,以及所述各子语句块表征的基准行数,以及所述SQL语句中是否包括限制参数,以及所述SQL语句中是否包括外排序参数,以及所述SQL语句中是否包括索引参数;

根据所述分析结果,确定按照所述SQL语句进行数据库处理操作时所表征的基准行数,所述基准行数为进行数据库处理操作时需要查询的数据行数;

当确定的所述基准行数小于行数阈值时,确定按照所述SQL语句进行数据库处理操作,否则,确定取消按照所述SQL语句进行数据库处理操作。

2.如权利要求1所述的方法,其特征在于,在对所述SQL语句进行结构分析之前,还包括:

确定所述SQL语句为指定类型的SQL语句。

3.如权利要求1所述的方法,其特征在于,对所述SQL语句进行结构分析,具体包括:

当所述SQL语句为选择类型语句时,按照与选择类型语句对应的分析方式,对所述SQL语句进行结构分析;

当所述SQL语句为非选择类型语句时,将所述SQL语句转换为选择类型语句,按照与选择类型语句对应的分析方式,对转换后的SQL语句进行结构分析。

4.如权利要求1所述的方法,其特征在于,根据所述分析结果,确定按照所述SQL语句进行数据库处理操作时所表征的基准行数,具体包括:按照所述SQL语句所包括的各子语句块从前到后的顺序,对所述各子语句块进行分组,其中,每个分组中的第一个子语句块的类型为简单类型或者原始类型,且每个分组中除第一个子语句块外不包括简单类型和原始类型的子语句块;

针对每个分组包括的各子语句块的类型和表征的基准行数,采用如下步骤确定该分组表征的基准行数:

按照该分组包括的各子语句块的先后顺序,从该分组中第二个子语句块开始,依次确定每个子语句块对应的中间基准行数,并将该分组中最后一个子语句块对应的中间基准行数作为该分组表征的基准行数,其中,当子语句块的类型为联合类型或依赖联合类型时,该子语句块对应的中间基准行数为前一个子语句块对应的中间基准行数和该子语句块表征的基准行数的乘积,当子语句块的类型为子查询类型、依赖子查询类型或派生类型时,该子语句块对应的中间基准行数为前一个子语句块对应的中间基准行数和该子语句块表征的基准行数中的最小值,该分组中的第一个子语句块对应的中间基准行数为第一个子语句块表征的基准行数;

确定各分组表征的基准行数的和值;

根据所述SQL语句中是否包括限制参数,以及是否包括外排序参数,对所述和值进行加减修正,得到第一修正值;

根据所述SQL语句中是否包括索引参数,对所述第一修正值进行倍数修正,得到所述SQL语句进行数据库处理操作时所表征的基准行数。

5.如权利要求1所述的方法,其特征在于,根据所述分析结果,确定按照所述SQL语句进行数据库处理操作时所表征的基准行数,具体包括:当确定出所述SQL语句包括的各子语句块的类型,以及所述各子语句块表征的基准行数,以及确定出所述SQL语句中不包括限制参数,以及所述SQL语句中包括外排序参数时,确定按照所述SQL语句进行数据库处理操作时所表征的基准行数。

6.如权利要求5所述的方法,其特征在于,根据所述分析结果,确定按照所述SQL语句进行数据库处理操作时所表征的基准行数,具体包括:按照所述SQL语句所包括的各子语句块从前到后的顺序,对所述各子语句块进行分组,其中,每个分组中的第一个子语句块的类型为简单类型或者原始类型,且每个分组中除第一个子语句块外不包括简单类型和原始类型的子语句块;

针对每个分组包括的各子语句块的类型和表征的基准行数,采用如下步骤确定该分组表征的基准行数:

按照该分组包括的各子语句块的先后顺序,从该分组中第二个子语句块开始,依次确定每个子语句块对应的中间基准行数,并将该分组中最后一个子语句块对应的中间基准行数作为该分组表征的基准行数,其中,当子语句块的类型为联合类型或依赖联合类型时,该子语句块对应的中间基准行数为前一个子语句块对应的中间基准行数和该子语句块表征的基准行数的乘积,当子语句块的类型为子查询类型、依赖子查询类型或派生类型时,该子语句块对应的中间基准行数为前一个子语句块对应的中间基准行数和该子语句块表征的基准行数中的最小值,该分组中的第一个子语句块对应的中间基准行数为第一个子语句块表征的基准行数;

确定各分组表征的基准行数的和值;

根据所述SQL语句中是否包括索引参数,对所述和值进行倍数修正,得到所述SQL语句进行数据库处理操作时所表征的基准行数。

7.一种结构化查询语言SQL语句处理装置,其特征在于,包括:

获取单元,用于获取请求进行数据库处理操作的SQL语句;

分析单元,用于对所述SQL语句进行结构分析,得到分析结果;所述分析单元具体用于对所述SQL语句进行结构分析,确定所述SQL语句包括的各子语句块的类型,以及所述各子语句块表征的基准行数,以及所述SQL语句中是否包括限制参数,以及所述SQL语句中是否包括外排序参数,以及所述SQL语句中是否包括索引参数;

第一确定单元,用于根据所述分析结果,确定按照所述SQL语句进行数据库处理操作时所表征的基准行数,所述基准行数为进行数据库处理操作时需要查询的数据行数;

第二确定单元,用于当确定的所述基准行数小于行数阈值时,确定按照所述SQL语句进行数据库处理操作,否则,确定取消按照所述SQL语句进行数据库处理操作。

8.如权利要求7所述的装置,其特征在于,所述分析单元,还用于在对所述SQL语句进行分析之前,确定所述SQL语句为指定类型的SQL语句。

9.如权利要求7所述的装置,其特征在于,所述分析单元,具体用于当所述SQL语句为选择类型语句时,按照与选择类型语句对应的分析方式,对所述SQL语句进行结构分析;以及当所述SQL语句为非选择类型语句时,将所述SQL语句转换为选择类型语句,按照与选择类型语句对应的分析方式,对转换后的SQL语句进行结构分析。

10.如权利要求7所述的装置,其特征在于,所述第一确定单元,具体用于按照所述SQL语句所包括的各子语句块从前到后的顺序,对所述各子语句块进行分组,其中,每个分组中的第一个子语句块的类型为简单类型或者原始类型,且每个分组中除第一个子语句块外不包括简单类型和原始类型的子语句块;并针对每个分组包括的各子语句块的类型和表征的基准行数,采用如下步骤确定该分组表征的基准行数:按照该分组包括的各子语句块的先后顺序,从该分组中第二个子语句块开始,依次确定每个子语句块对应的中间基准行数,并将该分组中最后一个子语句块对应的中间基准行数作为该分组表征的基准行数,其中,当子语句块的类型为联合类型或依赖联合类型时,该子语句块对应的中间基准行数为前一个子语句块对应的中间基准行数和该子语句块表征的基准行数的乘积,当子语句块的类型为子查询类型、依赖子查询类型或派生类型时,该子语句块对应的中间基准行数为前一个子语句块对应的中间基准行数和该子语句块表征的基准行数中的最小值,该分组中的第一个子语句块对应的中间基准行数为第一个子语句块表征的基准行数;

确定各分组表征的基准行数的和值;并根据所述SQL语句中是否包括限制参数,以及是否包括外排序参数,对所述和值进行加减修正,得到第一修正值;以及根据所述SQL语句中是否包括索引参数,对所述第一修正值进行倍数修正,得到所述SQL语句进行数据库处理操作时所表征的基准行数。

11.如权利要求7所述的装置,其特征在于,所述第一确定单元,具体用于当确定出所述SQL语句包括的各子语句块的类型,以及所述各子语句块表征的基准行数,以及确定出所述SQL语句中不包括限制参数,以及所述SQL语句中包括外排序参数时,确定按照所述SQL语句进行数据库处理操作时所表征的基准行数。

12.如权利要求11所述的装置,其特征在于,所述第一确定单元,具体用于按照所述SQL语句所包括的各子语句块从前到后的顺序,对所述各子语句块进行分组,其中,每个分组中的第一个子语句块的类型为简单类型或者原始类型,且每个分组中除第一个子语句块外不包括简单类型和原始类型的子语句块;并针对每个分组包括的各子语句块的类型和表征的基准行数,采用如下步骤确定该分组表征的基准行数:按照该分组包括的各子语句块的先后顺序,从该分组中第二个子语句块开始,依次确定每个子语句块对应的中间基准行数,并将该分组中最后一个子语句块对应的中间基准行数作为该分组表征的基准行数,其中,当子语句块的类型为联合类型或依赖联合类型时,该子语句块对应的中间基准行数为前一个子语句块对应的中间基准行数和该子语句块表征的基准行数的乘积,当子语句块的类型为子查询类型、依赖子查询类型或派生类型时,该子语句块对应的中间基准行数为前一个子语句块对应的中间基准行数和该子语句块表征的基准行数中的最小值,该分组中的第一个子语句块对应的中间基准行数为第一个子语句块表征的基准行数;

确定各分组表征的基准行数的和值;并根据所述SQL语句中是否包括索引参数,对所述和值进行倍数修正,得到所述SQL语句进行数据库处理操作时所表征的基准行数。

说明书 :

一种SQL语句处理方法及装置

技术领域

[0001] 本发明涉及数据库技术领域,尤其涉及一种SQL语句处理方法及装置。

背景技术

[0002] MySQL是一种关联数据库管理系统,其使用的SQL(Structured Query Language,结构化查询语言)是用于访问数据库的最常用标准化语言。
[0003] 在现有的MySQL技术中,MySQL Proxy是一个处于客户端和MySQL服务器端之间的一个应用程序,作为中间层代理,负责将前台应用客户端的连接请求转发给后台的数据库,并且通过使用lua脚本,可以实现复杂的连接控制和过滤,从而实现读写分离和负载平衡。对于应用客户端来说,MySQL Proxy是完全透明的,应用客户端则只需要连接到MySQL Proxy的监听端口即可。
[0004] 随着对于海量数据存储和查询的需要,现有技术中出现了公有云计算的分布式数据库集群技术,在实际应用中,经常会有大量应用客户端向数据库集群请求进行一些数据库处理操作,而且,其中还可能包括一些不良的,甚至是恶意的请求操作,导致数据库集群的整体负载较高,降低了进行数据库处理操作的效率,并影响了对其他客户端的正常请求的处理。
[0005] 然而,将MySQL Proxy引入到数据库集群技术中,也仅是能实现连接控制、读写分离和负载平衡等,而无法对请求进行数据库处理操作的SQL语句的安全性进行判定,以提高数据库的运行性能。

发明内容

[0006] 本发明实施例提供一种SQL语句处理方法及装置,用以解决现有技术中存在的数据库运行性能较低问题。
[0007] 本发明实施例提供一种SQL语句处理方法,包括:
[0008] 获取请求进行数据库处理操作的SQL语句;
[0009] 对所述SQL语句进行结构分析,得到分析结果;
[0010] 根据所述分析结果,确定按照所述SQL语句进行数据库处理操作时所表征的基准行数,所述基准行数为进行数据库处理操作时需要查询的数据行数;
[0011] 当确定的所述基准行数小于行数阈值时,确定按照所述SQL语句进行数据库处理操作,否则,确定取消按照所述SQL语句进行数据库处理操作。
[0012] 本发明实施例还提供一种结构化查询语言SQL语句处理装置,包括:
[0013] 获取单元,用于获取请求进行数据库处理操作的SQL语句;
[0014] 分析单元,用于对所述SQL语句进行结构分析,得到分析结果;
[0015] 第一确定单元,用于根据所述分析结果,确定按照所述SQL语句进行数据库处理操作时所表征的基准行数,所述基准行数为进行数据库处理操作时需要查询的数据行数;
[0016] 第二确定单元,用于当确定的所述基准行数小于行数阈值时,确定按照所述SQL语句进行数据库处理操作,否则,确定取消按照所述SQL语句进行数据库处理操作。
[0017] 本发明有益效果包括:
[0018] 本发明实施例提供的方法中,对于请求进行数据库处理操作的SQL语句,根据对该SQL语句进行结构分析的分析结果,确定按照该SQL语句进行数据库处理操作时所表征的基准行数,并当确定的基准行数小于行数阈值时,确定按照该SQL语句进行数据库处理操作,否则,确定取消按照所述SQL语句进行数据库处理操作。由于该基准行数为进行数据库处理操作时需要查询的数据行数,即能够表征按照该SQL语句进行数据库处理操作时对数据库负载的影响,所以当该基准行数小于行数阈值时,表示该SQL语句不会引起数据库系统负载的较大增长,确定按照该SQL语句进行数据库处理操作,否则,即当该基准行数不小于行数阈值时,表示该SQL语句会引起数据库系统负载的较大增长,确定取消按照该SQL语句进行数据库处理操作,因此能够有效过滤掉导致数据库负载较大的SQL语句,从而提高了数据库运行性能。

附图说明

[0019] 附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明实施例一起用于解释本发明,并不构成对本发明的限制。在附图中:
[0020] 图1为本发明实施例提供的SQL语句处理方法的流程图;
[0021] 图2为本发明实施例1提供的SQL语句处理方法的流程图;
[0022] 图3为本发明实施例2提供的SQL语句处理方法的流程图;
[0023] 图4为本发明实施例3提供的SQL语句处理装置的结构示意图。

具体实施方式

[0024] 为了给出提高数据库运行性能的实现方案,本发明实施例提供了一种SQL语句处理方法及装置,以下结合说明书附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明。并且在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
[0025] 本发明实施例提供一种SQL语句处理方法,如图1所示,包括:
[0026] 步骤101、获取请求进行数据库处理操作的SQL语句。
[0027] 步骤102、对该SQL语句进行结构分析,得到分析结果。
[0028] 步骤103、根据分析结果,确定按照该SQL语句进行数据库处理操作时所表征的基准行数,基准行数为进行数据库处理操作时需要查询的数据行数。
[0029] 步骤104、当确定的基准行数小于行数阈值时,确定按照该SQL语句进行数据库处理操作,否则,确定取消按照该SQL语句进行数据库处理操作。
[0030] 进一步的,在执行步骤102之前,可以判断该SQL语句的类型,并针对指定类型的SQL语句进入后续的分析处理,指定类型可以根据实际需要进行设置,例如,将可能导致数据库负载较大增长的SQL语句的类型设置为指定类型,具体可以包括选择类型(select)、更新类型(update)、删除类型(delete)、创建索引类型(create index)和修改表结构类型(alter table)。
[0031] 进一步的,在上述步骤102中对该SQL语句进行结构分析时,具体可以根据该SQL语句的类型,按照与其类型对应的分析方式,对该SQL语句进行结构分析;也可以当该SQL语句为选择类型语句时,按照与选择类型语句对应的分析方式,对该SQL语句进行结构分析,当该SQL语句非选择类型语句时,将该SQL语句转换为选择类型语句,按照与选择类型语句对应的分析方式,对转换后的SQL语句进行结构分析。其中,由于在实现时,相比对各种类型的SQL语句的分析,对SQL语句的类型转换更容易,所以,采用第二种方式将SQL语句转换为统一的选择类型语句,再进行结构分析,能够提高本方案的处理效率。
[0032] 进一步的,本发明实施例中针对上述步骤103和步骤104的处理,也提出了更详细的处理流程,下面结合附图,用具体实施例对本发明提供的方法及装置进行详细描述。
[0033] 实施例1:
[0034] 图2所示为本发明实施例1提供的SQL语句处理方法的流程图,具体包括如下处理步骤:
[0035] 步骤201、获取请求进行数据库处理操作的SQL语句。
[0036] 该SQL语句可以为应用客户端向数据库系统发送的用于请求进行数据库处理操作的SQL语句,本发明实施例1中,在该SQL语句到达数据库系统,并按照该SQL语句进行相应处理操作之前,可以先获取该SQL语句,并按照后续的处理流程对其进行处理,以判定该SQL语句是否会引起数据库系统负载的较大增长,从而确定是否按照该SQL语句进行数据库处理操作。
[0037] 其中,该数据库系统可以为公有云计算的分布式数据库集群,可以为其它类型的数据库系统。
[0038] 步骤202、确定该SQL语句是否为指定类型的SQL语句,如果不是,进入步骤203,如果是,进入步骤204。
[0039] 其中,指定类型可以根据实际需要进行设置,例如,将可能导致数据库负载较大的SQL语句的类型设置为指定类型,具体可以包括选择类型(select)、更新类型(update)、删除类型(delete)、创建索引类型(create index)和修改表结构类型(alter table)。
[0040] 步骤203、当该SQL语句不是指定类型的SQL语句时,或者,从后续的步骤212进入本步骤,即当该SQL语句进行数据库处理操作时所表征的基准行数小于行数阈值时,表示该SQL语句不会引起数据库系统负载的较大增长,所以确定按照该SQL语句进行数据库处理操作,具体可以将该SQL语句转发至数据库系统,由数据库系统按照该SQL语句进行相应的处理操作。
[0041] 步骤204、当该SQL语句是指定类型的SQL语句时,表示该SQL语句可能会引起数据库系统负载的较大增长,所以需要通过对其进行结构分析,以便作进一步的判定。
[0042] 本步骤中,首先确定该SQL语句是否为选择类型语句,如果不是,进入步骤205,如果是,进入步骤206。
[0043] 步骤205、将该SQL语句转换为选择类型语句。
[0044] 具体可以基于该非选择类型的SQL语句中用于表征类型的类型标记,确定该SQL语句的类型,并根据该SQL语句的类型,从该SQL语句中提取对应的内容信息,并基于所提取的内容信息生成该SQL语句对应的转换后的选择类型的SQL语句。
[0045] 例如,针对更新类型的SQL语句在进行转换时,提取的内容信息可以包括:别名、表名和条件(where)语句;针对删除类型的SQL语句在进行转换时,提取的内容信息可以包括:标识、表名和条件语句;针对创建索引类型的SQL语句在进行转换时,提取的内容信息可以包括:表名;针对修改表结构类型的SQL语句在进行转换时,提取的内容信息可以包括表名。
[0046] 步骤206、针对由上述步骤204中确定的为选择类型的SQL语句,以及上述步骤205中经过转换后的为选择类型的SQL语句,本步骤中,按照与选择类型语句对应的分析方式,对该SQL语句进行结构分析,并得到分析结果。
[0047] 具体的,可以通过对该SQL语句进行结构分析,确定该SQL语句包括的各子语句块的类型,以及包括的各子语句块表征的基准行数,以及该SQL语句中是否包括限制(limit)参数,即该SQL语句最外层是否附带了限制参数,以及该SQL语句中是否包括外排序参数,即该SQL语句最外层是否附带了外排序参数,以及该SQL语句中是否包括索引参数。
[0048] 下面对分析结果中SQL语句包括的各子语句块的类型和表征的基准行数举例描述如下:
[0049] 表1所示为该SQL语句包括的各子语句块的第一种情况。
[0050] 表1
[0051]
[0052] 表2所示为该SQL语句包括的各子语句块的第二种情况。
[0053] 表2
[0054]
[0055] 表3所示为该SQL语句包括的各子语句块的第三种情况。
[0056] 表3
[0057]
[0058] 在得到上述分析结果后,即可以根据得到的分析结果,确定按照该SQL语句进行数据库处理操作时所表征的基准行数,基准行数为进行数据库处理操作时需要查询的数据行数,具体可以包括如下步骤207-步骤211:
[0059] 步骤207、按照该SQL语句所包括的各子语句块从前到后的顺序,对该各子语句块进行分组,其中,每个分组中的第一个子语句块的类型为简单类型(SIMPLE)或者原始类型(PRIMARY),且每个分组中除第一个子语句块外不包括简单类型和原始类型的子语句块,且每个分组包括的各子语句块的先后顺序,与其在该SQL语句所包括的各子语句块中的先后顺序相同。
[0060] 下面基于上述三种情况,分别对该SQL语句包括的各子语句块的分组结果举例描述如下:
[0061] 表4所示为针对上述第一种情况对该SQL语句包括的各子语句块进行分组的结果。
[0062] 表4
[0063]
[0064] 表5所示为针对上述第二种情况对该SQL语句包括的各子语句块进行分组的结果。
[0065] 表5
[0066]
[0067] 表6所示为针对上述第三种情况对该SQL语句包括的各子语句块进行分组的结果。
[0068] 表6
[0069]
[0070] 步骤208、针对每个分组包括的各子语句块的类型和表征的基准行数,采用如下步骤确定该分组表征的基准行数:
[0071] 按照该分组包括的各子语句块的先后顺序,从该分组中第二个子语句块开始,依次确定每个子语句块对应的中间基准行数,并将该分组中最后一个子语句块对应的中间基准行数作为该分组表征的基准行数;
[0072] 其中,针对待确定中间基准行数的当前子语句块,当该子语句块的类型为联合类型(UNION)或依赖联合类型(DEPENDENT UNION)时,该子语句块对应的中间基准行数为前一个子语句块对应的中间基准行数和该子语句块表征的基准行数的乘积;
[0073] 当该子语句块的类型为子查询类型(SUBQUERY)、依赖子查询类型(DEPENDENT SUBQUERY)或派生类型(DERIVED)时,该子语句块对应的中间基准行数为前一个子语句块对应的中间基准行数和该子语句块表征的基准行数中的最小值;
[0074] 并且,该分组中的第一个子语句块对应的中间基准行数为第一个子语句块表征的基准行数。
[0075] 下面基于上述三种情况,分别对该SQL语句的每组表征的基准行数的计算举例描述如下:
[0076] 表7所示为针对上述第一种情况该SQL语句的每组表征的基准行数。
[0077] 表7
[0078]
[0079] 表8所示为针对上述第二种情况该SQL语句的每组表征的基准行数。
[0080] 表8
[0081]
[0082] 表9所示为针对上述第三种情况该SQL语句的每组表征的基准行数。
[0083] 表9
[0084]
[0085]
[0086] 步骤209、确定该SQL语句包括的各子语句块的各分组表征的基准行数的和值。
[0087] 针对上述第一种情况,两个分组表征的基准行数的和值为:20+150=170。
[0088] 针对上述第二种情况,两个分组表征的基准行数的和值为:10+3920=3930。
[0089] 针对上述第三种情况,两个分组表征的基准行数的和值为:100+2=102。
[0090] 步骤210、根据该SQL语句中是否包括限制参数,以及是否包括外排序参数,对得到的该和值进行加减修正,得到第一修正值。
[0091] 其中,基于SQL语句中限制参数和外排序参数各自对应的数据库处理操作对数据库系统的负载的影响,可以确定当包括限制参数时,可以进行对应的减少修正,当不包括限制参数时,进行对应的增加修正,当包括外排序参数时,可以进行对应的增加修正,当不包括外排序参数时,进行对应的减少修正,进行加减修正所增加或减少的数值可以根据实际需要进行设置,例如,针对限制参数进行加减修正时增加或减少第一修正阈值,针对外排序参数进行加减修正时增加或减少第二修正阈值。
[0092] 步骤211、根据该SQL语句中是否包括索引参数,对得到的第一修正值进行倍数修正,并将修正后得到的结果,作为该SQL语句进行数据库处理操作时所表征的基准行数。
[0093] 其中,基于SQL语句中索引参数对应的数据库处理操作对数据库系统的负载的影响,可以确定当包括索引参数时,对得到的第一修正值进行倍数修正,且该倍数大于0且小于1,即确定该倍数与第一修正值的乘积,该倍数也可以称作第三修正阈值,第三修正阈值可以根据实际需要进行设置。
[0094] 步骤212、确定得到的该SQL语句进行数据库处理操作时所表征的基准行数是否小于行数阈值,如果小于,进入步骤203,如果大于,进入步骤213。
[0095] 其中,行数阈值可以根据数据库系统的特性和实际需要进行灵活设置。
[0096] 步骤213、如果该基准行数不小于行数阈值,表示该SQL语句会引起数据库系统负载的较大增长,从而导致数据库系统的运行性能明显降低,所以确定取消按照该SQL语句进行数据库处理操作,具体可以取消将该SQL语句转发至数据库系统,并可以向请求的应用客户端返回错误响应。
[0097] 采用本发明实施例1提供的上述方案,由于确定的SQL语句表征的基准行数为进行数据库处理操作时需要查询的数据行数,即能够表征按照该SQL语句进行数据库处理操作时对数据库负载的影响,所以根据该基准行数与行数阈值的大小关系,确定是否按照该SQL语句进行数据库处理操作,能够有效过滤掉导致数据库负载较大的SQL语句,从而提高了数据库运行性能。
[0098] 实施例2:
[0099] 图3所示为本发明实施例2提供的SQL语句处理方法的流程图,具体包括如下处理步骤:
[0100] 步骤301-步骤306、分别与上述图2所示流程中的步骤201-步骤206相同,在此不再进行详细描述。
[0101] 步骤307、确定该SQL语句中是否包括限制参数,以及该SQL语句中是否包括外排序参数,如果该SQL语句中包括限制参数,且不包括外排序参数,进入步骤303,否则,即该SQL语句中不包括限制参数时,或者包括外排序参数时,或者不包括限制参数且包括外排序参数时,进入步骤308。
[0102] 步骤308、与上述图2所示流程中的步骤207相同。
[0103] 步骤309、与上述图2所示流程中的步骤208相同。
[0104] 步骤310、与上述图2所示流程中的步骤209相同。
[0105] 步骤311、根据该SQL语句中是否包括索引参数,对得到的和值进行倍数修正,并将修正后得到的结果,作为该SQL语句进行数据库处理操作时所表征的基准行数。
[0106] 其中,基于SQL语句中索引参数对应的数据库处理操作对数据库系统的负载的影响,可以确定当包括索引参数时,对得到的和值进行倍数修正,且该倍数大于0且小于1,即确定该倍数与该和值的乘积,该倍数也可以称作第三修正阈值,第三修正阈值可以根据实际需要进行设置。
[0107] 步骤312、确定得到的该SQL语句进行数据库处理操作时所表征的基准行数是否小于行数阈值,如果小于,进入步骤303,如果大于,进入步骤313。
[0108] 其中,行数阈值可以根据数据库系统的特性和实际需要进行灵活设置。
[0109] 步骤313、如果该基准行数不小于行数阈值,表示该SQL语句会引起数据库系统负载的较大增长,从而导致数据库系统的运行性能明显降低,所以确定取消按照该SQL语句进行数据库处理操作,具体可以取消将该SQL语句转发至数据库系统,并可以向请求的应用客户端返回错误响应。
[0110] 采用本发明实施例2提供的上述方案,同样能够有效过滤掉导致数据库负载较大的SQL语句,从而提高了数据库运行性能。
[0111] 实施例3:
[0112] 基于同一发明构思,根据本发明上述实施例提供的SQL语句处理方法,相应地,本发明实施例3还提供了一种SQL语句处理装置,其结构示意图如图4所示,具体包括:
[0113] 获取单元401,用于获取请求进行数据库处理操作的SQL语句;
[0114] 分析单元402,用于对所述SQL语句进行结构分析,得到分析结果;
[0115] 第一确定单元403,用于根据所述分析结果,确定按照所述SQL语句进行数据库处理操作时所表征的基准行数,所述基准行数为进行数据库处理操作时需要查询的数据行数;
[0116] 第二确定单元404,用于当确定的所述基准行数小于行数阈值时,确定按照所述SQL语句进行数据库处理操作,否则,确定取消按照所述SQL语句进行数据库处理操作。
[0117] 进一步的,分析单元402,还用于在对所述SQL语句进行分析之前,确定所述SQL语句为指定类型的SQL语句。
[0118] 进一步的,分析单元402,具体用于当所述SQL语句为选择类型语句时,按照与选择类型语句对应的分析方式,对所述SQL语句进行结构分析;以及当所述SQL语句为非选择类型语句时,将所述SQL语句转换为选择类型语句,按照与选择类型语句对应的分析方式,对转换后的SQL语句进行结构分析。
[0119] 进一步的,分析单元402,具体用于对所述SQL语句进行结构分析,确定所述SQL语句包括的各子语句块的类型,以及所述各子语句块表征的基准行数,以及所述SQL语句中是否包括限制参数,以及所述SQL语句中是否包括外排序参数,以及所述SQL语句中是否包括索引参数。
[0120] 进一步的,第一确定单元403,具体用于按照所述SQL语句所包括的各子语句块从前到后的顺序,对所述各子语句块进行分组,其中,每个分组中的第一个子语句块的类型为简单类型或者原始类型,且每个分组中除第一个子语句块外不包括简单类型和原始类型的子语句块;并针对每个分组包括的各子语句块的类型和表征的基准行数,采用如下步骤确定该分组表征的基准行数:
[0121] 按照该分组包括的各子语句块的先后顺序,从该分组中第二个子语句块开始,依次确定每个子语句块对应的中间基准行数,并将该分组中最后一个子语句块对应的中间基准行数作为该分组表征的基准行数,其中,当子语句块的类型为联合类型或依赖联合类型时,该子语句块对应的中间基准行数为前一个子语句块对应的中间基准行数和该子语句块表征的基准行数的乘积,当子语句块的类型为子查询类型、依赖子查询类型或派生类型时,该子语句块对应的中间基准行数为前一个子语句块对应的中间基准行数和该子语句块表征的基准行数中的最小值,该分组中的第一个子语句块对应的中间基准行数为第一个子语句块表征的基准行数;
[0122] 确定各分组表征的基准行数的和值;并根据所述SQL语句中是否包括限制参数,以及是否包括外排序参数,对所述和值进行加减修正,得到第一修正值;以及根据所述SQL语句中是否包括索引参数,对所述第一修正值进行倍数修正,得到所述SQL语句进行数据库处理操作时所表征的基准行数。
[0123] 进一步的,第一确定单元403,还用于在确定按照所述SQL语句进行数据库处理操作时所表征的基准行数之前,确定所述SQL语句中不包括限制参数,以及所述SQL语句中包括外排序参数。
[0124] 进一步的,第一确定单元403,具体用于按照所述SQL语句所包括的各子语句块从前到后的顺序,对所述各子语句块进行分组,其中,每个分组中的第一个子语句块的类型为简单类型或者原始类型,且每个分组中除第一个子语句块外不包括简单类型和原始类型的子语句块;并针对每个分组包括的各子语句块的类型和表征的基准行数,采用如下步骤确定该分组表征的基准行数:
[0125] 按照该分组包括的各子语句块的先后顺序,从该分组中第二个子语句块开始,依次确定每个子语句块对应的中间基准行数,并将该分组中最后一个子语句块对应的中间基准行数作为该分组表征的基准行数,其中,当子语句块的类型为联合类型或依赖联合类型时,该子语句块对应的中间基准行数为前一个子语句块对应的中间基准行数和该子语句块表征的基准行数的乘积,当子语句块的类型为子查询类型、依赖子查询类型或派生类型时,该子语句块对应的中间基准行数为前一个子语句块对应的中间基准行数和该子语句块表征的基准行数中的最小值,该分组中的第一个子语句块对应的中间基准行数为第一个子语句块表征的基准行数;
[0126] 确定各分组表征的基准行数的和值;并根据所述SQL语句中是否包括索引参数,对所述和值进行倍数修正,得到所述SQL语句进行数据库处理操作时所表征的基准行数。
[0127] 上述各模块的功能可对应于图1至图3所示流程中的相应处理步骤,在此不再赘述。
[0128] 综上所述,本发明实施例提供的方案,包括:获取请求进行数据库处理操作的SQL语句;并对该SQL语句进行结构分析,得到分析结果;并根据分析结果,确定按照该SQL语句进行数据库处理操作时所表征的基准行数,基准行数为进行数据库处理操作时需要查询的数据行数;以及当确定的基准行数小于行数阈值时,确定按照该SQL语句进行数据库处理操作,否则,确定取消按照该SQL语句进行数据库处理操作。采用本发明实施例提供的方案,提高了数据库运行性能。
[0129] 本申请的实施例所提供的装置可通过计算机程序实现。本领域技术人员应该能够理解,上述的模块划分方式仅是众多模块划分方式中的一种,如果划分为其他模块或不划分模块,只要装置具有上述功能,都应该在本申请的保护范围之内。
[0130] 本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
[0131] 这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
[0132] 这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
[0133] 显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。