oracle执行sql的地方,Oracle SQL的执行(一)

一、SGA--共享池

共享池是oracle缓存程序数据的地方.执行过的每一条sql语句在共享池中都存有解析后的内容.这个部分称作库高速缓存.在oracle解析每条sql之前,先检查库高速缓存,如果存在,就使用该信息.库高速缓存共享所有用户的所有sql.

共享池还包括oracle的系统参数,这一块被称为数据字典高速缓存.

二、库高速缓存

如下三条sql语句尽管返回的结果一样,但是在oracle中对应的hash_value值却不一样,oracle在执行sql语句时,会先把sql语句的字符串转换为哈希值,再有其他sql执行时,先根据哈希值进行匹配.匹配成功则取出该信息进行下一步操作.

SQL> select * from scott.emp where job='MANAGER';

SQL> select * /* a_comment*/ from scott.emp where job='MANAGER';

SQL> select * /* a_comment*/ from scott.emp where JOB='MANAGER';

SQL_TEXT HASH_VALUE

------------------------------ ----------

select * from scott.emp where 1888432946

job='MANAGER'

select * /* a_comment*/ from s 762411267

cott.emp where job='MANAGER'

select * /* a_comment*/ from s 210500030

cott.emp where JOB='MANAGER'

这三条语句因为字符串的大小写和注释,导致Hash_value值不一样,所有每次执行时都是硬解析,那么什么叫做软解析呢?----使用绑定变量

SQL> var job varchar2(10);

SQL> exec :job := 'MANAGER';

PL/SQL 过程已成功完成。

SQL> select * from scott.emp where job = :job;

已选择14行。

SQL> exec :job := 'CLERK';

PL/SQL 过程已成功完成。

SQL> select * from scott.emp where job = :job;

SQL> select sql_text , hash_value from v$sql where sql_text like '%scott.emp%';

SQL_TEXT HASH_VALUE

------------------------------ ----------

select * from scott.emp where 2635465461

job = :job

这就是为什么我们在使用jdbc的时候优先使用PreparedStatement.

本文是在学习的同时,当作笔记写的.有不对的,还请大家指出.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值