根源:網海拾貝
3.共享sql語句
為了不重複分析雷同的sql語句,在第一次分析之後, oracle將sql語句寄存在記憶體中.這塊位於系統全域性區域sga(system global area)的共享池(shared buffer pool)中的記憶體可以被全部的資料庫使用者共享. 因此,當你執行乙個sql語句(偶爾被稱為乙個游標)時,若是它和之前的執行過的語句完全雷同, oracle就能很快獲得已經被分析的語句以及最好的執行途徑. oracle的這個屈從大年夜大年夜地提高了sql的執行結果並節省了記憶體的運用.
可惜的是oracle只對儉樸的表提供高速緩衝(cache buffering) ,這個屈從並不合用於多表連線盤問.
資料庫打點員必須在init.ora中為這個區域設定符合的引數,當這個記憶體區域越大年夜,就可以儲存更多的語句,固然被共享的可以性也就越大年夜了.
當你向oracle 提交乙個sql語句,oracle會首先在這塊記憶體中查詢雷同的語句.
這裡需求註明的是,oracle對兩者**的是一種嚴厲受室,要殺青共享,sql語句必須
完全雷同(包括空格,換行等).
共享的語句必須滿意三個前提:
a. 字元級的對比:
以後被執行的語句和共享池中的語句必須完全雷同.
例如:select * from emp;
和下列每乙個都不同
select * from emp;
select * from emp;
select * from emp;
b. 兩個語句所指的工具必須完全雷同:
例如:使用者 工具名 怎樣訪謁
jack sal_limit private synonym
work_city public synonym
plant_detail public synonym
jill sal_limit private synonym
work_city public synonym
plant_detail table owner
思量一下下列sql語句能否在這兩個使用者之間共享.
sql能否共享
啟事select max(sal_cap) from sal_limit;
不克不及
每個使用者都有乙個private synonym - sal_limit , 它們是不同的工具
select count(*0 from work_city where sdesc like 'new%';
能兩個使用者訪謁雷同的工具public synonym - work_city
select a.sdesc,b.location from work_city a , plant_detail b where a.city_id = b.city_id
不克不及
使用者jack 議決private synonym訪謁plant_detail 而jill 是表的全部者,工具不同.
c. 兩個sql語句中必須運用雷同的名字的繫結變數(bind variables)
例如:第一組的兩個sql語句是雷同的(可以共享),而第二組中的兩個語句是不同的(即便在運轉時,賦於不同的繫結變數雷同的值)
a.select pin , name from people where pin = :blk1.pin;
select pin , name from people where pin = :blk1.pin;
b.select pin , name from people where pin = :blk1.ot_ind;
ORACLE SQL效能優化系列
1.選用適合的 oracle 優化器 oracle 的優化器共有3種 a.rule 基於規則 b.cost 基於成本 c.choose 選擇性 設定預設的優化器 可以通過對 init.ora 檔案中optimizer mode 引數的各種宣告,如 rule,cost,choose,all rows,...
ORACLE SQL效能優化系列
1.選用適合的oracle優化器 oracle的優化器共有3種 a.rule 基於規則 b.cost 基於成本 c.choose 選擇性 設定預設的優化器,可以通過對init.ora檔案中optimizer mode引數的各種宣告,如rule,cost,choose,all rows,first r...
Oracle SQL效能優化系列
1.選用適合的oracle優化器 oracle的優化器共有3種 a.rule 基於規則 b.cost 基於成本 c.choose 選擇性 設定預設的優化器,可以通過對init.ora檔案中optimizer mode引數的各種宣告,如rule,cost,choose,all rows,first r...