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

本文是在學習的同時,看成筆記寫的.有不對的,還請你們指出.字符串

相關文章
相關標籤/搜索