個人認為數據庫性能的關鍵因素在於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中的多表查詢是按照從右到左的數據排序的,所以最好選擇右邊數據少的表(也就是基本表),這樣排序更快。如果有鏈接表(多對多中間表),那麽把最右邊的鏈接表作為基本表,oracle默認會自動優化,但是如果配置了優化器。
6),其中句子規定:
Oracle中的Where語句是從右向左處理的,表與表之間的連接寫在其他條件之前,可以過濾掉很多數據放在where的末尾,另外!=符號比較列不會使用索引,計算(如大寫)後列不會使用索引(需要建立函數),is null、is not null等優化器不會使用索引。
7)使用Exits Not Exits代替In Not in。
8)合理使用事務,合理設置事務隔離。如果數據庫數據操作消耗數據庫資源,盡量使用批處理來減少事務操作的數量。