国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Oracle SQL性能優化總結(一)

2019-11-08 20:49:13
字體:
來源:轉載
供稿:網友

(1)選擇最有效率的表名順序(只在基于規則的優化器中有效)

Oracle的解析器按照從右到左的順序處理FROM子句中的表名,FROM子句中寫在最后的表(基礎表 driving table)將被最先處理,在FROM子句中包含多個表的情況下,你必須選擇記錄條數最少的表作為基礎表。如果有3個以上的表連接查詢, 那就需要選擇交叉表(intersection table)作為基礎表, 交叉表是指那個被其他表所引用的表。

(2)WHERE子句中的連接順序

ORACLE采用自下而上的順序解析WHERE子句,根據這個原理,表之間的連接必須寫在其他WHERE條件之前, 那些可以過濾掉最大數量記錄的條件必須寫在WHERE子句的末尾.

(3)SELECT子句中避免使用 *

ORACLE在解析的過程中, 會將’*’ 依次轉換成所有的列名, 這個工作是通過查詢數據字典完成的, 這意味著將耗費更多的時間。

(4)減少訪問數據庫的次數

ORACLE在內部執行了許多工作: 解析SQL語句, 估算索引的利用率, 綁定變量 , 讀數據塊等;

(5)SQL*Plus

SQL*Forms和PRo*C中重新設置ARRAYSIZE參數, 可以增加每次數據庫訪問的檢索數據量 ,建議值為200

(6)使用DECODE函數來減少處理時間

使用DECODE函數可以避免重復掃描相同記錄或重復連接相同的表.

(7)整合簡單,無關聯的數據庫訪問

如果你有幾個簡單的數據庫查詢語句,你可以把它們整合到一個查詢中(即使它們之間沒有關系)

(8)刪除重復記錄

最高效的刪除重復記錄方法 ( 因為使用了ROWID)例子:

DELETE FROM EMP E WHERE E.ROWID > (SELECT MIN(X.ROWID)FROM EMP X WHERE X.EMP_NO = E.EMP_NO);

(9)用TRUNCATE替代DELETE

當刪除表中的記錄時,在通常情況下, 回滾段(rollback segments)用來存放可以被恢復的信息。 如果你沒有COMMIT事務,ORACLE會將數據恢復到刪除之前的狀態(準確地說是恢復到執行刪除命令之前的狀況) 而當運用TRUNCATE時, 回滾段不再存放任何可被恢復的信息.當命令運行后,數據不能被恢復.因此很少的資源被調用,執行時間也會很短. (譯者按: TRUNCATE只在刪除全表適用,TRUNCATE是DDL不是DML)

(10)盡量多使用COMMIT

只要有可能,在程序中盡量多使用COMMIT, 這樣程序的性能得到提高,需求也會因為COMMIT所釋放的資源而減少: COMMIT所釋放的資源:

回滾段上用于恢復數據的信息.被程序語句獲得的鎖redo log buffer 中的空間ORACLE為管理上述3種資源中的內部花費
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 九龙县| 长葛市| 甘孜| 襄汾县| 平原县| 泽普县| 苍梧县| 察雅县| 新津县| 周宁县| 尤溪县| 衡阳市| 定边县| 澄江县| 丘北县| 宜良县| 民乐县| 忻州市| 白城市| 霍城县| 大荔县| 渑池县| 长白| 梓潼县| 来凤县| 宽甸| 河源市| 甘南县| 新化县| 大厂| 锡林浩特市| 霍邱县| 黄冈市| 巫山县| 江达县| 连江县| 长武县| 商都县| 易门县| 麟游县| 宁蒗|