ORACLE SQL效能優化系列 三

2021-03-31 08:56:29 字數 2962 閱讀 9551

8.

使用

decode函式來減少處理時間

使用decode

函式可以避免重複掃瞄相同記錄或重複連線相同的表.例如

:select count(*)

,sum(sal)

from

empwhere dept_no = 0020

and ename like

『**ith%』;

select count(*)

,sum(sal)

from

empwhere dept_no = 0030

and ename like

『**ith%』;

你可以用

decode

函式高效地得到相同結果

select count(decode(dept_no,0020,』x』,null)) d0020_count,

count(decode(dept_no,0030,』x』,null)) d0030_count,

sum(decode(dept_no,0020,sal,null)) d0020_sal,

sum(decode(dept_no,0030,sal,null)) d0030_sal

from emp where ename like 『**ith%』;

類似的,decode

函式也可以運用於

group by

和order by

子句中.

9.

整合簡單

,無關聯的資料庫訪問

,

你可以把它們整合到乙個查詢中

(即使它們之間沒有關係)例如

:select name

from emp

where emp_no = 1234;

select name

from dpt

where dpt_no = 10 ;

select name

from cat

where cat_type = 『rd』;

上面的3

個查詢可以被合併成乙個

:select e.name , d.name , c.name

from cat c , dpt d , emp e,dual x

where nvl(『x』,x.dummy) = nvl(『x』,e.rowid(+))

and nvl(『x』,x.dummy) = nvl(『x』,d.rowid(+))

and nvl(『x』,x.dummy) = nvl(『x』,c.rowid(+))

and e.emp_no(+) = 1234

and d.dept_no(+) = 10

and c.cat_type(+) = 『rd』;

(譯者按

: 雖然採取這種方法

,效率得到提高

,但是程式的可讀性大大降低

,所以讀者

還是要權衡之間的利弊

)

10.

刪除重覆記錄

最高效的刪除重覆記錄方法

( 因為使用了

rowid)

delete from emp e

where e.rowid > (select min(x.rowid)

from emp x

where x.emp_no = e.emp_no);

11.

truncate替代

delete

當刪除表中的記錄時

,在通常情況下

, 回滾段

(rollback segments )

用來存放可以被恢復的資訊

. 如果你沒有

***mit

事務,oracle

會將資料恢復到刪除之前的狀態

(準確地說是

恢復到執行刪除命令之前的狀況

)而當運用

truncate時,

回滾段不再存放任何可被恢復的資訊

.當命令執行後

,資料不能被恢復

.因此很少的資源被呼叫

,執行時間也會很短

.(譯者按

: truncate只在刪除全表適用

,truncate

ddl不是

dml)

12.

盡量多使用

***mit

只要有可能

,在程式中盡量多使用

***mit,

這樣程式的效能得到提高

,需求也會因為

***mit

所釋放的資源而減少

:***mit

所釋放的資源:a.

回滾段上用於恢復資料的資訊.b.

被程式語句獲得的鎖

c.redo log buffer

中的空間

d.oracle

為管理上述

3種資源中的內部花費

(譯者按

: 在使用

***mit時必須要注意到事務的完整性

,現實中效率和事務完整性往往是魚和熊掌不可得兼

)

(摘錄自csdn)

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...