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
本文是在學習的同時,看成筆記寫的.有不對的,還請你們指出.字符串