7.
減少訪問資料庫的次數
當執行每條
sql語句時
, oracle
在內部執行了許多任務作
: 解析
sql語句
, 估算索引的利用率
, 繫結變數
, 讀資料塊等等
. 由此可見
, 減少訪問資料庫的次數
, 就能實際上減少
oracle
的工作量.例如
,以下有三種方法可以檢索出雇員號等於
0342
或0291
的職員.
方法1 (
最低效)
select emp_name , salary , grade
from emp
where emp_no = 342;
select emp_name , salary , grade
from emp
where emp_no = 291;
方法2 (
次低效)
declare
cursor c1 (e_no number) is
select emp_name,salary,grade
from emp
where emp_no = e_no;
begin
open c1(342);
fetch c1 into …,..,.. ;
…..open c1(291);
fetch c1 into …,..,.. ;
close c1;
end;
方法3 (高效)
select a.emp_name , a.salary , a.grade,
b.emp_name , b.salary , b.grade
from emp a,emp b
where a.emp_no = 342
andb.emp_no = 291;
注意:
在sql*plus , sql*forms
和pro*c
中重新設定
arraysize
引數,
可以增加每次資料庫訪問的檢索資料量
,建議值為
2008.
使用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
子句中.
oracle sql效能優化系列(一)
oracle sql效能優化系列(二)
oracle sql效能優化系列(三)
oracle sql效能優化系列(四)
oracle sql效能優化系列(六)
oracle sql效能優化系列(七)
oracle sql效能優化系列(八)
oracle sql效能優化系列(九)
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...