#新炬學院分享#關於Oracle資料庫最佳化的幾點總結

shsnchyw發表於2015-09-16

資料庫效能最關鍵的因素在於IO,因為操作記憶體是快速的,但是讀寫磁碟是速度很慢的,最佳化資料庫最關鍵的問題在於減少磁碟的IO,就個人理解應該分為物理的和邏輯的最佳化, 物理的是指Oracle產品本身的一些最佳化,邏輯最佳化是指應用程式級別的最佳化。


物理最佳化的一些原則:


1)Oracle的執行環境(網路,硬體等);


2)使用合適的最佳化器;


3)合理配置oracle例項引數;


4)建立合適的索引(減少IO);


5)將索引資料和表資料分開在不同的表空間上(降低IO衝突);


6)建立表分割槽,將資料分別儲存在不同的分割槽上(以空間換取時間,減少IO)。


邏輯上最佳化:


1)可以對錶進行邏輯分割,如中國移動使用者表,可以根據手機尾數分成10個表,這樣對效能會有一定的作用;


2)Sql語句使用佔位符語句,並且開發時候必須按照規定編寫sql語句(如全部大寫,全部小寫等)oracle解析語句後會放置到共享池中,如:select * from Emp where name=?這個語句只會在共享池中有一條,而如果是字串的話,那就根據不同名字存在不同的語句,所以佔位符效率較好;


3)資料庫不僅僅是一個儲存資料的地方,同樣是一個程式設計的地方,一些耗時的操作,可以透過儲存過程等在使用者較少的情況下執行,從而錯開系統使用的高峰時間,提高資料庫效能;


4)儘量不使用*號,如select * from Emp,因為要轉化為具體的列名是要查資料字典, 比較耗時;


5)選擇有效的表名:對於多表連線查詢,可能oracle的最佳化器並不會最佳化到這個程度, oracle 中多表查詢是根據FROM字句從右到左的資料進行的,那麼最好右邊的表(也就是基礎表)選 擇資料較少的表,這樣排序更快速,如果有link表(多對多中間表),那麼將link表放最右邊作為基礎表,在預設情況下oracle會自動最佳化,但是如果配置了最佳化器的情況下,可能不會自動最佳化,所以平時最好能按照這個方式編寫sql;


6)Where字句規則:Oracle 中Where字句時從右往左處理的,表之間的連線寫在其他條件之前,能過濾掉非常多的資料的條件,放在where的末尾, 另外!=符號比較的列將不使用索引,列經過了計算(如變大寫等)不會使用索引(需要建立起函式), is null、is not null等最佳化器不會使用索引;


7)使用Exits Not Exits 替代 In Not in;


8)合理使用事務,合理設定事務隔離性,資料庫的資料操作比較消耗資料庫資源的,儘量使用批次處理,以降低事務操作次數。


成功一定有方法,失敗一定有原因,失敗的原因只有一個,那就是四個字:學習不夠!最新最全的新炬學院官網

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29960155/viewspace-1800970/,如需轉載,請註明出處,否則將追究法律責任。

相關文章