Oracle資料庫優化的一些建議

2021-10-05 15:40:01 字數 2122 閱讀 3193

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語句處理過程

Oracle資料庫的一些操作

如何備份oracle資料庫 md f db bak date 0,10 exp userid bszlhr bszlhr orcl 14 file f db bak date 0,10 bszlhr date 0,10 dmp log f db bak date 0,10 log bszlhr da...

oracle資料庫的一些操作

oracle啟用禁用約束 alter table table name disable enable constraint constraint name禁用或啟用約束 alter table table name drop constraint constraint name通過主鍵名刪除約束 查...

一些Oracle資料庫中的查詢優化建議綜合

1.對查詢進行優化,應盡量避免全表掃瞄,首先應考慮在 where 及 order by 涉及的列上建立索引。2.應盡量避免在 where 子句中對字段進行 null 值判斷,否則將導致引擎放棄使用索引而進行全表掃瞄,如 select id from t where num is null 可以在nu...