Oracle數據庫優化的一些建議

https://baijiahao.baidu.com/s?id=1609391382597168099&wfr=spider&for=pc

1、ORACLE 優化內容

根據業務分析人員、設計人員、應用程序開發人員、數據庫管理員、系統管理員幾個不同的角色,針對每個不同角色,進行針對性的內容優化。

在這裏插入圖片描述
2、怎樣寫好SQL語句

(1)、 儘量簡單,模塊化

(2)、易讀、易維護

(3)、節省資源

(4)、 內存

(5)、CPU

(6)、 掃描的數據塊要少

(7)、少排序

(8)、不造成死鎖 ( 檢查是否被鎖:v$locked_object )

3、SQL優化的一般性原則

(1)、目標:

減少服務器資源消耗(主要是磁盤IO);

(2)、設計方面:

合適的索引,索引的雙重效應,列的選擇性;

(3)、編碼方面:

利用索引,避免大表FULL TABLE SCAN;

合理使用臨時表;

避免寫過於複雜的sql,不一定非要一個sql解決問題;

在不影響業務的前提下減小事務的粒度;

4、優化概括(SQL語句基本原則)

● 查詢儘量用確定的列名,少用*號。

select * from bdc_zc_qs;

性能優化後的語句: select bzm_qs,ywh,… from bdc_zc_qs;

● 儘量少嵌套子查詢,這種查詢會消耗大量的CPU資源;

● 比較多or運算的查詢能使用union all 替換 or運算,建議分成多個查詢,用union all聯結起來;

● 多表查詢選擇最有效率的表名順序;

oracle解析器對錶解析從右到左,所以記錄少的表放在右邊;

● 儘量多用commit語句提交事務,可以及時釋放資源、解鎖、釋放日誌空間、減少管理花費;

儘量避免使用dblink訪問數據庫,使用dblink會產生數據上的網絡交互,極大影響性能;

● union all 替換union,union 原理是把兩個集合union all起來在進行排序去重複;

● 儘量不要使用distint,distinct會產生排序;

視圖儘量不要使用order by

避免在索引列上使用函數,計算等;

避免在索引列上使用not條件

● 注意查詢列字段類型,避免索引列自動轉換;

例如:select * from bdc_zc_qs qs where qs.ywh=666,這種情況oracle會轉換成to_number(qs.ywh)=666

用not exists 替代not in;

● 符號運算使用順序:=、>=、>、<>;

● 使用where條件時候把最優的條件放最後,oracle採用自下而上的順序解析WHERE子句,根據這個原理, 當在where 子句中有多個表聯接時,where 子句中排在最後的表應當是返回行數可能最少的表,有過濾條件的子句應放在where 子句中的最後。

5、SQL語句優化的過程

(1)、定位有問題的語句;

(2)、檢查執行計劃;

(3)、 檢查執行過程中優化器的統計信息;

(4)、分析相關表的記錄數、索引情況

(5)、 改寫SQL語句、使用HINT、調整索引、表分析

(6)、有些SQL語句不具備優化的可能,需要優化處理方式;

6、SQL語句執行過程
在這裏插入圖片描述

7、SQL語句處理過程
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章