SQl语句中使用点位符的优点
来源:互联网 发布:js系统方法描述错误 编辑:程序博客网 时间:2024/05/16 01:36
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 Server中使用触发器的优点
- sql语句中参数的使用
- 在SQL语句中“?”参数的使用
- oracle中sql语句的使用
- SQL语句中使用Distinct的技巧
- SQL语句中引号的使用
- PL/SQL 中 CASE 语句的使用
- sql语句中JOIN ON 的使用
- sql语句中问号?的使用
- PL/SQL 中 CASE 语句的使用
- 数据库中查询语句的使用(sql)
- sql 中having语句的使用
- sql中group by 语句的使用
- 九度题目36:二叉搜索树(判断是否是相同二叉搜索树)
- 第二周项目一:有序的结构体数组
- 控制台操作mysql
- #error 宏
- 项目三 奖学金名单
- SQl语句中使用点位符的优点
- el和ognl的区别
- hdu2457
- 的淡淡的
- 文件操作
- Silverlight之out of Browser模式
- Shell中的管道
- Android 自定义Progress Bar
- osgdrawinstanced例子