永发信息网

如何执行绑定变量的SQL

答案:1  悬赏:10  手机版
解决时间 2021-03-23 21:51
如何执行绑定变量的SQL
最佳答案
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 plain copy
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 plain copy 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 plain copy 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将会实现真正意义上的绑定变量,让用户享受到绑定变量带来的好处。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
gtx660玩dota2怎么一团战就直接4-50帧数,有
单选题关于非洲的叙述,不正确的是A.平均高度
招行信用卡附属卡怎么办理?
NDS牧场物语双子村猫头鹰有什么用?
白螺镇工农村村民委员会地址在什么地方,想过
网络异常连接不上是啥原因
一个长方体的长、宽、高都扩大4倍,则这个长
霸道爱情的名人名言,被人整后的霸气句子
有两杯无色透明的液体,分别是硬水和软水,如
天天用纯牛奶洗澡可以吗?
在微分中,怎样证明dx=Δx
说老公对自己好的句子,怎样形容厨艺好
梦见在梦里跟老婆团聚是什么意思
语言知识及运用(共两节,满分35分)完形填空
盈泰地产在什么地方啊,我要过去处理事情
推荐资讯
司前派出所地址好找么,我有些事要过去,
好世纪大酒店建设大道店我想知道这个在什么地
跳蚤在没有人和动物的地方能存活多久?
安全购物在哪里啊,我有事要去这个地方
判断题两条直线互相垂直,所成的四个角一定都
deng的非主流写法
Cimtas Steel Processing Co.Ltd怎么样
西安717路公交倒181路公交怎么倒
一部动画,主要背景为外星球有一个岛,岛上四
如何手机绑定企业邮箱,我手机绑定了一个邮箱
单选题She________herlittlesonandget
已知如图,则不含阴影部分的矩形的个数是A.15
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?