问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何解析sql语句中的绑定变量

发布网友 发布时间:2022-04-21 06:34

我来回答

1个回答

热心网友 时间:2022-04-09 13:55

1. 认识绑定变量:

绑定变量是为了减少解析的,比如你有个语句这样
select aaa,bbb from ccc where ddd=eee;
如果经常通过改变eee这个谓词赋值来查询,像如下
select aaa,bbb from ccc where ddd=fff;
select aaa,bbb from ccc where ddd=ggg;
select aaa,bbb from ccc where ddd=hhh;
每条语句都要被数据库解析一次,这样比较浪费资源,如果把eee换成“:1”这样的绑定变量形式,无论ddd后面是什么值,都不需要重复解析

Java实现绑定变量的方法:
[java] view plaincopy
PreparedStatement pstmt = con.prepareStatement("UPDATE employees SET salay = ? WHERE id = ?");
pstmt.setBigDecimal(1, 15.00);
pstmt.setInt(2, 110592);
/result statmement: UPDATE employees SET salay = 15.00 WHERE id = 110592
pstmt.executeQuery();

假设要将id从1到10000的员工的工资都更新为150.00元,不使用绑定变量,则:
[java] view plaincopy
sql.executeQuery("UPDATE employees SET salay = 150.00 WHERE id = 1");
sql.executeQuery("UPDATE employees SET salay = 150.00 WHERE id = 2");
sql.executeQuery("UPDATE employees SET salay = 150.00 WHERE id = 3");
sql.executeQuery("UPDATE employees SET salay = 150.00 WHERE id = 4");
....
sql.executeQuery("UPDATE employees SET salay = 150.00 WHERE id = 10000");
使用绑定变量,则:
[java] view plaincopy
PreparedStatement pstmt;
for (id = 1; id < 10000; id )
{
if (null == pstmt)
pstmt = con.prepareStatement("UPDATE employees SET salay = ? WHERE id = ?");
pstmt.setBigDecimal(1, 150.00);
pstmt.setInt(2, id);
pstmt.executeQuery();
}
二者区别在于,不用绑定变量,则相当于反复解析、执行了1w个sql语句。使用绑定变量,解析sql语句只用了一次,之后的9999次复用第一次生成的执行计划。显然,后者效率会更高一些。
2. 什么时候不应该/不必要使用绑定变量
a. 如果你用数据仓库,一条大查询一跑几个小时,根本没必要做绑定变量,因为解析的消耗微乎其微。
b. 变量对优化器产生执行计划有很重要的影响的时候:绑定变量被使用时,查询优化器会忽略其具体值,因此其预估的准确性远不如使用字面量值真实,尤其是在表存在数据倾斜(表上的数据非均匀分布)的列上会提供错误的执行计划。从而使得非高效的执行计划被使用。

3. 绑定变量在OceanBase中的实现
目前OceanBase中实现了绑定变量,目的主要是为了编程方便,而不是为了降低生成执行计划的代价。为什么呢?因为OceanBase中目前使用的是一种”静态执行计划“,无论什么Query,执行流程都一样。OB在前端代理ObConnector中实现绑定变量,将用户传入的变量进行to_string()操作,替代SQL语句中相应的部分,形成一个完整的SQL。然后这个SQL传递给MS,MS按照标准流程来解析和执行。相信不远的将来,OB将会实现真正意义上的绑定变量,让用户享受到绑定变量带来的好处。
绑定变量SQL语句实现

在SQL编程中,变量的使用是常见的操作。首先,你需要通过var关键字来声明一个变量,明确指定变量的名称和数据类型。例如:SQL&gt; var i varchar2(10);这里,我们声明了一个名为i的变量,其类型为可变长度的字符字符串,最多容纳10个字符。然后,你可以使用exec语句来给这个变量赋值。赋值操作使用=:符号...

如何查看Oracle SQL绑定变量

sql_id,name, datatype_string, last_captured,value_string from v$sql_bind_capture where sql_id='dxfcacn4t4ppw' order by LAST_CAPTURED,POSITION;--这个sql从awr中读取绑定变量值信息 select instance_number, sql_id,name, datatype_string,last_captured,value_string from dba_hist_sqlbind...

什么是SQL绑定变量,如何实现绑定变量

set @var = '变量';set @sql = 'select * from post where post_addr like ''%'+@var+'%''';--注意,sql默认是不支持双引号的,只能用单引号 exec @sql;

oracle sql语法 ①中的:1代表什么;②中声明的变量类型是什么;③中的...

1. 这是一个绑定变量的标准写法,:1可以理解为一个占位符。OLTP系统里面使用这种绑定变量的写法可以减少硬解析的次数,减少对数据字典以及Latch的使用,单个语句上提升的不大,但是对于整体性能有很大的提升。2. 声明了一个number数组类型num_list,其最大存储number元素的个数为20。java里面类似于int[20...

SQL语句执行流程与顺序原理解析

如果SQL语句中使用了绑定变量,扫描绑定变量的声明,给绑定变量赋值,将变量值带入执行计划。若在解析的第一个步骤,SQL在高速缓冲中存在,则直接跳到该步骤。第四步:语句执行语句解析只是对SQL语句的语法进行解析,以确保服务器能够知道这条语句到底表达的是什么意思。等到语句解析完成之后,数据库服务器进程才会真正的执行...

谁能讲讲sql硬软解析的区别

DML:INSERT,UPDATE,DELETE,SELECT DDL:CREATE,DROP,ALTER 一. SQL 解析过程 Oracle对此SQL将进行几个步骤的处理过程:1、语法检查(syntax check): 检查此sql的拼写是否语法。2、语义检查(semantic check): 诸如检查sql语句中的访问对象是否存在及该用户是否具备相应的权限。3、对sql语句进行解析(prase)...

系统的一个异常SQL的处理

下面是查询到的绑定变量值,可以通过查看v$sql_bind_capture视图来查看变量的实际值,如果时间比较久,可以使用如下的语句查看历史的绑定变量信息 以下是开启了autotrace 选项跟踪的手工执行情况,从执行效率上看是没有问题的。从执行计划和表的数据量等方面判断如果sql的开销有问题,应该出现在表SAMS_CHECK...

如何在对in操作使用变量绑定

一种是使用一个固定的极限值,例如:99999,另一种是使用绑定变量。试验结果见文末,这两种方式产生的执行计划采用了Hash连接,执行计划比不使用RowNum实体化视图更差。第2种方式,如果使用指定嵌套连接提示或指定索引提示则需要对每个SQL针对性处理,需要分析具体的SQL。所以,一般情况建议在SQL中使用/*+ ...

2020-01-20 oracle中sql如何执行,什么是硬解析和软解析

这个过程需要一定的时间和资源,但执行的生成可以提高SQL语句的执行效率。软解析是指当Oracle在执行SQL语句时,发现该语句已经被解析过并且执行已经存在,那么就不需要再次解析,直接使用已有的执行进行执行。这样可以提高SQL语句的执行效率,省去解析的时间和资源。在实际应用中,SQL语句的执行过程中可能会出现...

如何找出错误ora-07445发生时系统执行的语句

在trace file中查找错误出现时的语句主要分两个步骤:首先找到错误发生时的执行语句,然后需要找到语句中绑定变量的值。Step 1:Find the SQL 在跟踪文件中查找字符串“Current cursor”(一般在cursor dump段的起始部分),使用current cursor后面的数字定位出错时系统的执行语句。如果找到的这个数字为0说明...

动态sql语句如何声明变量 数据库中定义变量的语句是 sql语句中使用变量 sql语句中传递变量 sql日志查出的语句都有变量 sql如何定义变量 sql语句给变量赋值 sql语句where条件是变量 sql绑定变量
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
膝盖下方,有一处有一个小的圆的东西,用手能移动它,但是动得时间长了... 膝盖的皮肤里长了一个绿豆大小的籽,用手摸起来滑溜溜的,但又不是动态... 膝盖上无缘无故长了几颗小籽籽,小籽籽中有白色的透明小粒粒 2024六一儿童节祝福语简短10字 六一儿童节文字内容简短 动物森友会大头菜在哪买 什么时候买最便宜 动物森友会大头菜怎么买 一起来看看 动物森友会大头菜在哪买介绍_动物森友会大头菜在哪买是什么 动物森友会大头菜哪里买 动物森友会大头菜方法 如何用电饼铛做美食 我有2个QQ都是会员号,但我想把其中一个号上的QQ群转到另一个号上... mysql oracle hbase Oceanbase 各有什么区别呢 怎样在天猫双十一活动中购物最省钱? 天猫双十一红包怎么抢 oceanbase表组能不能后面加 &quot;以root用户登录各oceanbase服务器&quot;这个具体怎么做 支付宝OceanBase团队怎么样 淘宝研发工程师c&#47;c工资待遇怎么样 如何看待 (2021年) OceanBase 开源? 如何评价OceanBase近期强大的宣传攻势? 什么是九价疫苗 九价疫苗被预约崩了,为什么这种疫苗这么难约? 香港九价HPV疫苗和内地的九价HPV疫苗有什么区别? 去香港打九价宫颈癌疫苗流程是什么,有熟悉的吗 公立医院预约的港版九价疫苗怎么样? 香港hpv九价疫苗和内地九价疫苗有区别吗? 有姐妹可以介绍一家真的香港九价hpv预约平台吗 免费九价政策 去香港打九价疫苗需要预约吗? 现在香港的9价hpv 要怎么打呢? 还能打吗 平常大家都熟悉去香港打9价hpv疫苗流程吗 什么是SQL绑定变量,如何实现绑定变量 哪些股票含有5g概念 5g概念股有哪些股票 什么是5G网络 概念股有哪些 正确的电线的接线方法是怎样的 电线接头怎么接 电线接头方法是什么? 蛇和蟒蛇有什么不一样? 电线接头接法图解 蛇,蚺,蟒怎样区分 电线搭接方法 巨蟒和蟒蛇有什么区别? 蛇和蟒的区别? 电线接头接法 蛇和莽的区别 两根电线对接法图解是怎样的? 水蚺和蟒蛇的区别? 森蚺和蟒蛇的区别是什么? 带电接电线正确接法是什么? 巨蚺和蟒蛇的区别是什么?