什么是sql绑定变量?怎么实现绑定变量?
1 什么绑定变量
绑定变量是为了减少解析的,⽐如有个语句:
Select aaa,bbb from cc where ddd=eee;
如果经常改变eee这个谓词赋值来查询,如:
Select aaa,bbb from cc where ddd=fff;
Select aaa,bbb from cc where ddd=ggg;
这样,每条语句都要被数据库解析⼀次,⽐较浪费资源,如果把eee换成“:1”这样的绑定变量形式,⽆论ddd后⾯是什么值,都不需要重复解析。
2 Java实现绑定变量
PreparedStatement pstmt = con.prepareStatement("UPDATE employees SET salay = ? WHERE id = ?");
pstmt.setBigDecimal(1, 15.00);
update是什么pstmt.setInt(2, 110592);
//result statmement:  UPDATE employees SET salay = 15.00 WHERE id = 110592
假设要讲Id从1到1000的员⼯的⼯资都更新为150元,不使⽤绑定变量,则:
....
使⽤绑定变量,则:
PreparedStatement pstmt;
for (id = 1; id < 1000; id++)
{
if (null == pstmt)
pstmt = con.prepareStatement("UPDATE employees SET salay = ? WHERE id = ?");
pstmt.setBigDecimal(1, 150.00);
pstmt.setInt(2, id);
}
区别是:
不⽤绑定变量,会反复解析、执⾏了**1千次**sql语句
使⽤绑定变量,解析*sql语句只⽤了⼀次,之后的999次复⽤第⼀次的执⾏计划*。这样效率会⾼⼀些。
3 绑定变量不必要的情况
1) ⼀条⼤查询⼀跑⼏个⼩时,没必要做绑定变量,因为解析的消耗微乎其微
2) 变量值对优化器产⽣执⾏计划有很重要的影响时:绑定变量在被使⽤时,优化器会忽略其具体值,因此其预估的准确性远不如使⽤具体值真实,尤其在表存在数据倾斜(表上的数据⾮均匀分布)的列上会提供错误的执⾏计划,从⽽是⾮⾼效的执⾏计划被使⽤。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。