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
本文是在学习的同时,看成笔记写的.有不对的,还请你们指出.字符串