MySQL-SQL绑定变量
来源:互联网 发布:淘宝刷单工作室怎么做 编辑:程序博客网 时间:2024/05/17 08:00
认识绑定变量
绑定变量是为了减少解析的,比如你有个语句这样
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 plaincopyPreparedStatement 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 plaincopysql.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 plaincopyPreparedStatement 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次复用第一次生成的执行计划。显然,后者效率会更高一些。
什么时候不应该/不必要使用绑定变量
- 如果你用数据仓库,一条大查询一跑几个小时,根本没必要做绑定变量,因为解析的消耗微乎其微。
- 变量对优化器产生执行计划有很重要的影响的时候:绑定变量被使用时,查询优化器会忽略其具体值,因此其预估的准确性远不如使用字面量值真实,尤其是在表存在数据倾斜(表上的数据非均匀分布)的列上会提供错误的执行计划。从而使得非高效的执行计划被使用。
0 2
- MySQL-SQL绑定变量
- jdbc测试mysql数据库sql预解析(绑定变量)
- jdbc测试mysql数据库sql预解析(绑定变量)
- jdbc测试mysql数据库sql预解析(绑定变量)
- jdbc测试mysql数据库sql预解析(绑定变量)
- jdbc测试mysql数据库sql预解析(绑定变量)
- pl/sql 绑定变量
- Oracle sql绑定变量
- SQL绑定变量
- sql 绑定变量问题
- mysql变量绑定 python
- MySQL的绑定变量
- 动态SQL与绑定变量
- 动态SQL及绑定变量
- 查看未绑定变量SQL
- java-sql 与 绑定变量
- Oracle PL/SQL 绑定变量
- 动态SQL使用绑定变量
- java堆栈了解
- JavaFx入门网站收藏
- C++ 字符串(char[]/string)与int型互换;
- android自定义刻度盘 表盘 速度表
- 设置xshell日志配置
- MySQL-SQL绑定变量
- Facebook 内部高效工作 PPT 指南
- 【 CodeForces 208A】Dubstep
- 监控摄像机如何选择镜头视场角
- 使用第三方库找不到SO库UnsatisfiedLinkError错误原因及解决方案
- 数据库事务隔离级别
- 洛谷P1455 搭配购买
- 用java提取不同类型的文章标题就要设计出不同的正则表达式
- rCNN学习笔记二:基于R-CNN的物体检测