四 索引與分頁--怎麼樣sql執行的更快
正確的使用索引
where條件落在索引上
不要在where的=前使用函式,否則無法使用索引
is null可能無法使用索引
不正確的隱式轉換可能不能使用索引
如果能在索引獲得資料,就不要回表
如果是復合索引,注意第2個字段以後,可能使用不到索引
正確的使用hint
如果有別名,一定要有別名
格式如/*+ index(t index_name) */
無需回表查詢的分頁寫法
存在以下表t1(a,b,c,d) t1上有索引字段(b,c) .如果只是查b,c兩個欄位則:
*from
(select
tt.b, tt.c, rownum
asrn
from
(select
t.b, t.c
from
t1 t
wherec =
2order
byt.c) tt
where
rownum
<3)
where
rn >1
需回表查詢的分頁寫法
select
/*+ ordered use_nl(t,t1) */*
from
(select
rid
from
(select
rownum rn,rid
from
(select
rowid rid
from
t1wherec=
2order
byc
desc
) where
rownum
<=
50)
where
rn >=
1) t,
t1where
t.rid
=t1.rowid;
Oracle Sql優化筆記
基本的sql編寫注意事項 需要注意的是,隨著oracle的公升級,查詢優化器會自動對sql語句進行優化,某些限制可能在新版本的oracle下不再是問題。尤其是採用cbo cost based optimization,基於代價的優化方式 時。我們可以總結一下可能引起全表掃瞄的操作 oracle優化器...
Oracle Sql優化筆記
基本的sql 編寫注意事項 需要注意的是,隨著oracle的公升級,查詢優化器會自 動對sql語句 進行優化,某些限制可能在新版本的oracle下不再是問題。尤其是採用 cbo cost based optimization 基於代價的 優化方式 時。我們可以 總結一下可能引起全表 掃瞄的操作 or...
Oracle Sql優化筆記
基本的sql編寫注意事項 需要注意的是,隨著oracle的公升級,查詢優化器會自動對sql語句進行優化,某些限制可能在新版本的oracle下不再是問題。尤其是採用cbo cost based optimization,基於代價的優化方式 時。我們可以總結一下可能引起全表掃瞄的操作 oracle優化器...