? ? ? ? 個人理解,數據庫性能最關鍵的因素在于 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)、合理使用事務,合理設置事務隔離性,數據庫的數據操作比較消耗數據庫資源的,盡 量使用批量處理,以降低事務操作次數
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
