ExDate Oracle 數據庫優化的原則和方法

Oracle db開發的時候,對SQL性能質量的優化成本遠比在後期的成本要低。作爲數據庫開發人員,很應該有寫高性能sql意識習慣。比如,訪問表的方式有全表掃描和通過ROWID訪問表,可以不走全表掃描可以完成的,就儘量規避提升性能。SQL語句的優化過程可以是定位問題的語句;檢查執行計劃中優化器的統計信息;分析相關表的記錄數,索引情況;改寫sql,使用hint,調整索引,表分析;有些SQL語句不具備優化的可能或者優化效果不突出,需要優化數據處理的方式。

以下是ORACLE 語句類型:

1.DDL Data Definition Language)數據庫定義語言 
CREATE/ALTER/DROP/TRUNCATE/COMMENT/RENAME 
2.DML
DataManipulation Language)數據操縱語言  
INSERT/UPDATE/DELETE/MERGE/CALL/EXPLAIN PLAN/LOCK TABLE 
3.DCL
Data ControlLanguage)數據庫控制語言 授權,角色控制等 
GRANT/REVOKE
4.TCL
TransactionControl Language)事務控制語言 
SAVEPOINT
設置保存點/ROLLBACK 回滾/SETTRANSACTION

5.查詢語句

SELECT

訪問路徑的方式:1.FULL: 執行全表掃描。2.ROID: 根據ROWID進行掃描。3.INDEX: 根據某個索引進行掃描。

   在SQL性能優化方面有什麼經驗?這個問題我們先可以從配置數據庫的參數,提升數據庫硬件性能的薄弱點,再來從sql語句方面的提升。

sql編碼的時候,要考慮儘量減少服務器的資源消耗主要是磁盤IO;設計的時候儘量依賴oracle的優化器並選擇合適的索引,索引的雙重效應。

編碼的時候注意:

      0.合理利用索引,避免大表全表掃描。

      1.合理進行中間表落地。

      2.多用commit,釋放資源。

查詢語句的性能提升點:

      1.在寫查詢語句的時候,在查詢子句中不要嵌套子查詢,因爲每次執行的時候都需要去解析子查詢語句,導致效率變慢,where子句同理。

      2.較少非必要粒度,不需要的字段不要查詢出來。

      3.查詢的時候用‘*’,oralce會通過查數據字典來轉換成所有的列名,消耗更多的時間。

      4.distinct的時候,可以考慮用group by來代替,提高性能。distinct需要一次排序。

      5.where 子句中索引列是函數的部分,優化器將使用全表掃描,儘量規避。

      6.where 子句的解析是從下而上的,多大可能縮小數據範圍的條件放最下面。

      7.where代替 having having是在檢索出所有結果後再進行過濾的。這個過程需要排序和總計,消耗資源。

      8.用exist和 not exist來代替 in和 not in。規避全表掃描。Exists只檢查行的存在,而 in檢查實際值。EXISTS與IN的使用效率的問題,通常情況下采用exists要比in 效率高,因爲IN不走索引,但要看實際情況具體使用:
IN適合於外表大而內表小的情況;EXISTS適合於外表小而內表大的情況。

      9.規避那些因爲語句導致不可以使用索引的情況。比如用了<>,和字段拼接後比較。

      10.where子句中少用內聯視圖。

      11.儘量不使用索引,以啓用智能掃描。

      12.表關聯儘量用hash jion。

刪除語句的性能提升點:

      1.如果可以,用truncate代替 deletedelete下回滾段會存放可以恢復的信息,truncate則不會,所以效率高。

      2.刪除數據最好是利用分區或臨時表中轉,truncate表或者分區。

      3.使用並行DML可以有效提升速度。

      4.如果追求性能而又不允許適用truncate,可參考通過臨時表中轉,將刪除轉換爲CATS操作。

插入語句的性能提升點:

      1.可以的話直接在高水位進行插入,即用append 提示可最大程度提升性能,但是適用場景受限。

      2.插入處理可以適用DML並行提升性能。

更新語句的性能提升點:

      1.更新的時候注意批量更新,減小IO消耗。

      2.如果更新量大在大表中,初始化方式也可以選擇用merge,但是要注意控制。

      3.簡單的大數據量更新,可以適用DML並行處理。

      4.關聯更新中如果有複雜的子查詢,先將只查詢落地。

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