ORACLE SQL效能優化系列 三

2021-04-02 00:26:27 字數 1992 閱讀 2858

8. 使用decode函式來減少處理時間

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

例如:select count(*),sum(sal)

from emp

where dept_no = 0020

and ename like 『**ith%』;

select count(*),sum(sal)

from emp

where 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 ) 用來存放可以被恢復的資訊. 如果你沒有commit事務,oracle會將資料恢復到刪除之前的狀態(準確地說是

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

而當運用truncate時, 回滾段不再存放任何可被恢復的資訊.當命令執行後,資料不能被恢復.因此很少的資源被呼叫,執行時間也會很短.

(譯者按: truncate只在刪除全表適用,truncate是ddl不是dml)

12. 盡量多使用commit

只要有可能,在程式中盡量多使用commit, 這樣程式的效能得到提高,需求也會因為commit所釋放的資源而減少:

commit所釋放的資源:

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

b. 被程式語句獲得的鎖

c. redo log buffer 中的空間

d. oracle為管理上述3種資源中的內部花費

(譯者按: 在使用commit時必須要注意到事務的完整性,現實中效率和事務完整性往往是魚和熊掌不可得兼

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