1. in v.s. exist
in 先執行subQuery再將結果暫存去query mainQuery
exist 先執行 mainQuery再去掃subQuery
當主表>子表 適合用 in
當子表>主表 適合用 exist
依資料量而定
2. not exist 效率皆大於 not in
3. 少用 <> 以及 != ,會進行整表掃描。以>、<取代。愛用>= 少用> ,因union會進行刪除重複的資料,資料量大的話會造成disk sort 。如果不需要刪除就用union all
4. 使用null or not null 會停用索引進行整表掃描,最後再設定是可能用not null設定填入default值
5. 少在where子句中使用如nvl, decode, trunc, to_char, … 等
索引不是基於函數的,那麼當在Where子句中對索引列使用函數時,索引不再起作用。Where子句中避免在索引列上使用計算,否則將導致索引失效而進行全表掃瞄。
可採用Oracle 函數如引,參考
6. Order By語句中的非索引列會降低性能,order by 索引能加快速度。因此,不在Order By語句中使用表達式。
其他….where子句要注意的 網頁

