一种数据处理方法技术

技术编号:39497664 阅读:8 留言:0更新日期:2023-11-24 11:27
本发明专利技术涉及数据库技术,特别是涉及一种数据处理方法

【技术实现步骤摘要】
一种数据处理方法、存储介质与设备


[0001]本专利技术涉及数据库技术,特别是涉及一种数据处理方法

存储介质与设备


技术介绍

[0002]数据库执行一个
SQL
的过程一般分为词法分析

语法分析

语义分析

查询重写

生成执行计划

实际执行这几个阶段

其中,词法分析

语法分析

语义分析

查询重写这些阶段的最终目的是为了生成执行计划,而生成执行计划是为了高效地执行
SQL
并返回结果

当大量的数据库连接存在并且数据库的访问压力比较大时,以上
SQL
的执行过程会竞争共享资源,从而造成数据库的性能下降

实际上,对于某些格式基本类似的
SQL
来说,其从词法分析到生成执行计划阶段的执行过程以及中间产物完全相同

因此,对于这类
SQL
无需每次执行都重复执行相同的过程,而只需要把执行计划缓存起来

例如,对两个
SQL

select*from a where id<1

select*form a where id<10
,这两个
SQL
的执行结果不同,但执行计划可以是相同的

对于这类
SQL
语句,我们可以把其执行计划缓存起来,下次处理同类的
SQL
请求时,我们只需要读取缓存的执行计划,就可以避免执行语法分析

语义分析

查询重写

生成执行计划这些阶段的工作,从而提高系统的性能

[0003]目前有些数据库系统实现了执行计划的缓存


SQL
的过程中,会把
SQL
的执行计划缓存起来,到下一次执行相同的
SQL
时,直接从缓存中读取执行计划从而执行

例如,
Oracle
会把执行计划缓存在共享内存中,
KES
数据库会把执行计划缓存在本地内存中

[0004]然而,对于
SQL
中带有
like
操作的
SQL
,一部分可以将
like
操作变为比较操作,另一部分不可以将
like
操作变为比较操作

例如,对于
SQL

select*from a where name like

A


,可以转变为
where name>


A

and name<

B

,以将
like
操作变为比较操作,从而在执行计划中使用缓存

但是当
SQL
语句中带有参数时,例如
where name like$1
,则无法转化为比较操作,故其在缓存中的执行计划仅可以使用全表扫描,而不可使用索引扫描

目前的数据库系统会将带有
like
操作的
SQL
均归为一类
SQL
,并将其执行计划缓存起来

考虑到该类
SQL
中的部分
SQL
只能使用全表扫描,该类
SQL
缓存的执行计划也只能为全表扫描,不能使用索引扫描,这会导致全部带有
like
操作的
SQL
均执行全表扫描,
SQL
语句的执行效率低,从而影响了数据库的性能


技术实现思路

[0005]鉴于上述问题,提出了一种克服上述问题或者至少部分地解决上述问题的数据处理方法

存储介质与设备

[0006]本专利技术的一个目的是要提供一种数据处理方法,以提高
SQL
的执行效率

[0007]本专利技术一个进一步的目的是要提高在接收带有
like
操作的
SQL
请求之后确定执行计划的准确性

[0008]特别地,本专利技术提供了一种数据处理方法,包括:
[0009]在收到带有
like
操作的
SQL
语句的情况下,生成并缓存与带有
like
操作的
SQL
语句
对应的两个执行计划,两个执行计划包括访问类型为全表扫描的第一执行计划和访问类型为索引扫描的第二执行计划;
[0010]在接收带有
like
操作的
SQL
请求之后,判断带有
like
操作的
SQL
请求中的
like
操作是否可以转化为比较操作;
[0011]若是,则执行第二执行计划

[0012]可选地,判断带有
like
操作的
SQL
请求中的
like
操作是否可以转化为比较操作包括:
[0013]获取带有
like
操作的
SQL
请求中的
like
之后的常量;
[0014]根据常量,判断
like
操作中的
like
运算符是否可以转换为比较运算符;
[0015]若可以,则确定带有
like
操作的
SQL
请求中的
like
操作可以转化为比较操作;
[0016]若不可以,则确定带有
like
操作的
SQL
请求中的
like
操作不可以转化为比较操作

[0017]可选地,根据常量,判断
like
操作中的
like
运算符是否可以转换为比较运算符包括:
[0018]判断常量中是否存在前置的通配符;
[0019]若存在,则确定
like
操作中的
like
运算符不可以转换为比较运算符;
[0020]若不存在,则确定
like
操作中的
like
运算符可以转换为比较运算符

[0021]可选地,判断常量中是否存在前置的通配符包括:
[0022]本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.
一种数据处理方法,包括:在收到带有
like
操作的
SQL
语句的情况下,生成并缓存与所述带有
like
操作的
SQL
语句对应的两个执行计划,所述两个执行计划包括访问类型为全表扫描的第一执行计划和访问类型为索引扫描的第二执行计划;在接收带有
like
操作的
SQL
请求之后,判断所述带有
like
操作的
SQL
请求中的
like
操作是否可以转化为比较操作;若是,则执行所述第二执行计划
。2.
根据权利要求1所述的数据处理方法,其中,判断所述带有
like
操作的
SQL
请求中的
like
操作是否可以转化为比较操作包括:获取所述带有
like
操作的
SQL
请求中的
like
之后的常量;根据所述常量,判断所述
like
操作中的
like
运算符是否可以转换为比较运算符;若可以,则确定所述带有
like
操作的
SQL
请求中的
like
操作可以转化为比较操作;若不可以,则确定所述带有
like
操作的
SQL
请求中的
like
操作不可以转化为比较操作
。3.
根据权利要求2所述的数据处理方法,其中,根据所述常量,判断所述
like
操作中的
like
运算符是否可以转换为比较运算符包括:判断所述常量中是否存在前置的通配符;若存在,则确定所述
like
操作中的
like
运算符不可以转换为比较运算符;若不存在,则确定所述
like
操作中的
like
运算符可以转换为比较运算符
。4.
根据权利要求3所述的数据处理方法,其中,判断所述常量中是否存在前置的通配符包括:判断所述常量的第一位是否为通配符;若是,则确定所述常量中存在前置的通配符;若否,则确定所述常量中不存在前置的通配符
。5.
根据权利要求1所述的数据处理方法,其中,在收到带有
like
操作的
SQL
语句的情况下,生成并缓存与所述带有
like
操作的
SQL
语句对应的两个执行计划包括:在收到带有...

【专利技术属性】
技术研发人员:范国腾尹强徐登峰
申请(专利权)人:北京人大金仓信息技术股份有限公司
类型:发明
国别省市:

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

1