關於oralce資料庫優化的幾點總結
個人理解,資料庫效能最關鍵的因素在於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)、合理使用事務,合理設定事務隔離性,資料庫的資料操作比較消耗資料庫資源的,盡量使用批量處理,以降低事務操作次數
關於Oralce資料庫優化的幾點總結
個人理解,資料庫效能最關鍵的因素在於io,因為操作記憶體是快速的,但是讀寫磁碟是速度很慢的,優化資料庫最關鍵的問題在於減少磁碟的io,就個人理解應該分為物理的和邏輯的優化,物理的是指oracle產品本身的一些優化,邏輯優化是指應用程式級別的優化物理優化的一些原則 1 oracle的執行環境 網路,硬...
Oralce資料庫的優化 面試必問題
1 選擇最有效率的表名順序 只在基於規則的優化器中有效 oracle 的解析器按照從右到左的順序處理from子句中的表名,from子句中寫在最後的表 基礎表 driving table 將被最先處理,在from子句中包含多個表的情況下,你必須選擇記錄條數最少的表作為基礎表。如果有3個以上的表連線查詢...
Oralce資料庫的優化 面試必問題
1 選擇最有效率的表名順序 只在基於規則的優化器中有效 oracle 的解析器按照從右到左的順序處理from子句中的表名,from子句中寫在最後的表 基礎表 driving table 將被最先處理,在from子句中包含多個表的情況下,你必須選擇記錄條數最少的表作為基礎表。如果有3個以上的表連線查詢...