優化Oracle資料庫,有兩種方式
資料庫效能最關鍵的因素在於IO,因為操作記憶體是快速的,但是讀寫磁碟是速度很慢的,優化資料庫最關鍵的問題在於減少磁碟的IO,就個人理解應該分為物理的和邏輯的優化, 物理的是指oracle產品本身的一些優化,邏輯優化是指應用程式級別的優化
物理優化的一些原則:
1). Oracle的執行環境(網路,硬體等)
2). 使用合適的優化器
3). 合理配置oracle例項引數
修改最大連線數:alter system set processes=2000 scope = spfile;
禁止回收站功能:alter system set recyclebin=off scope=spfile;
4). 建立合適的索引(減少IO)
5). 將索引資料和表資料分開在不同的表空間上(降低IO衝突)
6). 建立表分割槽,將資料分別儲存在不同的分割槽上(以空間換取時間,減少IO)
邏輯上優化(開發有關):
1). 可以對錶進行邏輯分割,如中國移動使用者表,可以根據手機尾數分成10個表,這樣對效能會有一定的作用
sql語句上的優化
2). Sql語句使用佔位符語句,並且開發時候必須按照規定編寫sql語句(如全部大寫,全部小寫等)oracle解析語句後會放置到共享池中
如: select * from Emp where name=? 這個語句只會在共享池中有一條,而如果是字串的話,那就根據不同名字存在不同的語句,所以佔位符效率較好
3). 資料庫不僅僅是一個儲存資料的地方,同樣是一個程式設計的地方,一些耗時的操作,可以通過儲存過程等在使用者較少的情況下執行,從而錯開系統使用的高峰時間,提高資料庫效能
4). 儘量不使用*號,如select * from Emp,因為要轉化為具體的列名是要查資料字典,比較耗時
5).Oracle的解析器按照從右到左的順序處理處理FROM子句的
因此子句中寫在最後的表(基礎表 driving table)將被最先處理,在FROM子句中包含多個表的情況下,你必須選擇記錄條數最少的表作為基礎表。如果有3個以上的表連線查詢, 那就需要選擇交叉表(intersection table)作為基礎表, 交叉表是指那個被其他表所引用的表。
6). Where字句 規則
Oracle 中Where子句時從右往左處理的,能過濾掉非常多的資料的條件應該放在where的末尾, 另外!=符號比較的列將不使用索引,列經過了計算(如變大寫等)不會使用索引(需要建立起函式), is null、is not null等優化器不會使用索引
7). 使用Exits Not Exits 替代 In Not in 【不會使用索引】
8). 合理使用事務,合理設定事務隔離性
資料庫的資料操作比較消耗資料庫資源的,儘量使用批量處理,以降低事務操作次數
9) 為常用的查詢欄位建立索引 永遠給每一個表建立主鍵 外來鍵建立外來鍵關聯
10) 儘量在應用層使用快取 必須redis