選擇最有效率的表名順序(只在基於規則的優化器中有效)
oracle的解析器按照從右到左的順序處理from子句中的表名,因此from子句中寫在最後的表(基礎表 driving table)將被最先處理. 在from子句中包含多個表的情況下,你必須選擇記錄條數最少的表作為基礎表.當oracle處理多個表時, 會運用排序及合併的方式連線它們.首先,掃瞄第乙個表(from子句中最後的那個表)並對記錄進行派序,然後掃瞄第二個表(from子句中最後第二個表),最後將所有從第二個表中檢索出的記錄與第乙個表中合適記錄進行合併.
例如:表 tab1:16,384 條記錄、表 tab2:1 條記錄
選擇tab2作為基礎表 (最好的方法):執行時間0.96秒?
1
select
count
(*)
from
tab1,tab2
選擇tab2作為基礎表 (不佳的方法):執行時間26.09秒?
1
select
count
(*)
from
tab2,tab1
如果有3個以上的表連線查詢, 那就需要選擇交叉表(intersection table)作為基礎表, 交叉表是指那個被其他表所引用的表.
例如:emp表描述了location表和category表的交集.?
1
2
3
4
5
6
7
select
*
from
location l ,
category c,
emp e
where
e.emp_no
between
1000
and
2000
and
e.cat_no = c.cat_no
and
e.locn = l.locn
將比下列sql更有效率:?
1
2
3
4
5
6
7
select
*
from
emp e ,
location l ,
category c
where
e.cat_no = c.cat_no
and
e.locn = l.locn
and
e.emp_no
between
1000
and
2000
oracle之date 查詢效能優化
建立測試表 created table test id varchar2 20 not null,dtime date 插入6000000資料 declare i number k number begin k 0 for i in 1 6000000 loop insert into test i...
oracle效能優化
今天有個問題沒有答上來 oracle的效能優化。查了查資料,學習學習。優化心得摘抄 資料庫優化oracle9i 很多的時侯,做oracle dba的我們,當應用管理員向我們通告現在應用很慢 資料庫很慢的時侯,我們到資料庫時做幾個示例的select也發現同樣的問題時,有些時侯我們會無從下手,因為我們認...
oracle效能優化
sql共享原理 為了不重複解析相同的sql語句,在第一次解析之後,oracle將sql語句存放在記憶體中。這塊位於系統全域性區域sga systemglobal area 的共享池 shared buffer poo1 中的記憶體可以被所有的資料庫使用者共享。因此,當你執行乙個sql語句 有時被稱為...