SQl语句中使用占位符的优点
来源:互联网 发布:有关于网络的卡通形象 编辑:程序博客网 时间:2024/05/19 17:57
1.增加SQL代码可读性
2.占位符可以预先编译,提高执行效率
3.防止SQL注入
4用占位符的目的是绑定变量,这样可以减少数据SQL的硬解析,所以执行效率会提高不少
绑定变量是Oracle解决硬解析的首要利器,能解决OLTP系统中library cache的过度耗用以提高性能
绑定变量是Oracle解决硬解析的首要利器,能解决OLTP系统中library cache的过度耗用以提高性能。然刀子磨的太快,使起来锋利,却容易折断。凡事皆有利弊二性,因地制宜,因时制宜,全在如何权衡而已。本文讲述了绑定变量的使用方法,以及绑定变量的优缺点、使用场合。
提到绑定变量,就不得不了解硬解析与软解析。硬解析简言之即一条SQL语句没有被运行过,处于首次运行,则需要对其进行语法分析,语义识别,跟据统计信息生成最佳的执行计划,然后对其执行。而软解析呢,则是由于在library cache已经存在与该SQL语句一致的SQL语句文本、运行环境,即有相同的父游标与子游标,采用拿来主义,直接执行即可。软解析同样经历语法分析,语义识别,且生成hash value ,接下来在library cache搜索相同的hash value ,如存在在实施软解析。有关更多的硬解析与软解析以及父游标,子游标
绑定变量是为了减少解析的,比如你有个语句这样:
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后面是什么值,都不需要重复解析
假设要将id从1到10000的员工的工资都更新为150.00元,
不使用绑定变量:
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");
使用绑定变量:
UPDATE employees SET salay = ? WHERE id = ?"
二者区别在于,不用绑定变量,则相当于反复解析、执行了1w个sql语句。使用绑定变量,解析sql语句只用了一次,之后的9999次复用第一次生成的执行计划。显然,后者效率会更高一些。
什么时候不应该/不必要使用绑定变量
•a. 如果你用数据仓库,一条大查询一跑几个小时,根本没必要做绑定变量,因为解析的消耗微乎其微。
•b. 变量对优化器产生执行计划有很重要的影响的时候:绑定变量被使用时,查询优化器会忽略其具体值,因此其预估的准确性远不如使用字面量值真实,尤其是在表存在数据倾斜(表上的数据非均匀分布)的列上会提供错误的执行计划,从而使得非高效的执行计划被使用。
- SQl语句中使用占位符的优点
- SQl语句中使用占位符的优点
- SQl语句中使用占位符的优点
- SQl语句中使用占位符的优点
- SQl语句中使用点位符的优点
- 关于SQL语句的占位符使用及动态SQL
- 使用Freemarker解析占位符,构造可执行的SQL语句
- DB2中sql语句占位符问题
- SQL Server中使用触发器的优点
- 预处理语句占位符的使用
- 预处理语句占位符的使用
- 预处理语句占位符的使用
- mysql 的 占位符使用 以及一次执行多行sql语句
- SQL & HQL语句的区别和占位符 ?
- mybatis中的sql语句中的#{}占位符和${}占位符的区别及遇到的问题
- hql语句中使用占位符:xx 的时候,查询所有查询查不出来
- sql语句中的#{}占位符和${}占位符
- message 中占位符的使用
- 5 Examples of Different Types of CAPTCHAs
- Google 发布 Bottom Navigation design guidelines
- c++实现split函数
- 2016年阿里实习生面试经历及问题总结(2016-03-15)
- Intel Edison 换完Debian 后开机自动设置 Wifi
- SQl语句中使用占位符的优点
- web测试总结3
- html
- iOS-UITableView头视图动态布局
- mysql 如何设置自动增长序列 sequence(一)
- sql动态传入数组值
- 必须使用角色管理工具 安装或配置microsoft.net framework 3.5 sp1
- OpenCV Stitching_detailed 详解
- 两个空间对象