關于Oracle數據庫優化的幾點總結
個人理解,數據庫性能最關鍵的因素在于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)合理使用事務,合理設置事務隔離性,數據庫的數據操作比較消耗數據庫資源的,盡量使用批量處理,以降低事務操作次數
posted on 2013-06-27 11:13 順其自然EVO 閱讀(233) 評論(0) 編輯 收藏 所屬分類: 數據庫