關於oracle效能優化

2021-10-02 03:21:26 字數 1985 閱讀 8041

計數的三種方法,建議使用第一種,效率更高(沒有索引的情況下)

低效

高效

當在sql語句中連線多個表時, 請使用表的別名並把別名字首於每個column上.這樣一來,就可以減少解析的時間並減少那些由column歧義引起的語法錯誤。

column歧義指的是由於sql中不同的表具有相同的column名,當sql語句**現這個column時,sql解析器無法判斷這個column的歸屬

當提交乙個包含對多表資訊(比如部門表和雇員表)的查詢時,避免在select子句中使用distinct。 一般可以考慮用exist替換。

exists 使查詢更為迅速,因為子查詢的條件一旦滿足後,立刻返回結果。

低效:

高效:

(1)特點

優點: 提高效率 主鍵的唯一性驗證

代價: 需要空間儲存 定期維護

(2)oracle對索引有兩種訪問模式

索引唯一掃瞄 (index unique scan)

索引範圍掃瞄 (index range scan)

(3)基礎表的選擇

基礎表(driving table)是指被最先訪問的表(通常以全表掃瞄的方式被訪問)。 根據優化器的不同,sql語句中基礎表的選擇是不一樣的。

如果你使用的是cbo (cost based optimizer),優化器會檢查sql語句中的每個表的物理大小,索引的狀態,然後選用花費最低的執行路徑。

如果你用rbo (rule based optimizer), 並且所有的連線條件都有索引對應,在這種情況下,基礎表就是from 子句中列在最後的那個表。

(4)多個平等的索引

當sql語句的執行路徑可以使用分布在多個表上的多個索引時,oracle會同時使用多個索引並在執行時對它們的記錄進行合併,檢索出僅對全部索引有效的記錄。

在oracle選擇執行路徑時,唯一性索引的等級高於非唯一性索引。然而這個規則只有當where子句中索引列和常量比較才有效。如果索引列和其他表的索引類相比較。這種子句在優化器中的等級是非常低的。

如果不同表中兩個相同等級的索引將被引用,from子句中表的順序將決定哪個會被率先使用。 from子句中最後的表的索引將有最高的優先順序。

如果相同表中兩個相同等級的索引將被引用,where子句中最先被引用的索引將有最高的優先順序。

低效:高效:

低效:高效:

當sql語句需要union兩個查詢結果集合時,這兩個結果集合會以union-all的方式被合併,然後在輸出最終結果前進行排序。如果用union all替代union,這樣排序就不是必要了,效率就會因此得到提高。

由於union all的結果沒有經過排序,而且不過濾重複的記錄,因此是否進行替換需要根據業務需求而定。

full hint 告訴oracle使用全表掃瞄的方式訪問指定表。

rowid hint 告訴oracle使用table access by rowid的操作訪問表。

cache hint 來告訴優化器把查詢結果資料保留在sga中。

index hint 告訴oracle使用基於索引的掃瞄方式。

提高group by語句的效率,可以通過將不需要的記錄在group by之前過濾掉。

低效:高效:

oracle效能優化

今天有個問題沒有答上來 oracle的效能優化。查了查資料,學習學習。優化心得摘抄 資料庫優化oracle9i 很多的時侯,做oracle dba的我們,當應用管理員向我們通告現在應用很慢 資料庫很慢的時侯,我們到資料庫時做幾個示例的select也發現同樣的問題時,有些時侯我們會無從下手,因為我們認...

oracle效能優化

sql共享原理 為了不重複解析相同的sql語句,在第一次解析之後,oracle將sql語句存放在記憶體中。這塊位於系統全域性區域sga systemglobal area 的共享池 shared buffer poo1 中的記憶體可以被所有的資料庫使用者共享。因此,當你執行乙個sql語句 有時被稱為...

Oracle 效能優化

1.在select語句中避免使用 2.使用truncate清空表 2.1語法 truncate table cluster shema.table name cluster name drop reuse storage 3.使用rowid高效刪除重覆記錄 rowid是可以唯一標記記錄的物理位置 d...