Oracle SQL的执行(一)

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

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

    2、库高速缓存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.code

本文是在学习的同时,看成笔记写的.有不对的,还请你们指出.字符串

相关文章
相关标签/搜索