oracle sql調優
Oracle SQL調優
(2010-11-10 17:08:43)Oracle SQL調優除此之外還有以下幾方面的注意點:
1. 選擇最有效率的表名順序
由於ORACLE解析器按照從右到左的順序處理FROM子句中的表名,因此FROM子句中寫在最後的表(基礎表 driving table)將被最先處理。
當ORACLE處理多個表時, 會運用排序及合併的方式連線它們.首先,掃描第一個表(FROM子句中最後的那個表)並對記錄進行排序,然後掃描第二個表(FROM子句中最後第二個表),最後將所有從第二個表中檢索出的記錄與第一個表中合適記錄進行合併。
EXP:
表 TAB1 16,384 條記錄
表 TAB2 1 條記錄
選擇TAB2作為基礎表 (最好的方法)
select count(*) from tab1,tab2 執行時間0.96秒
select count(*) from tab2,tab1 執行時間26.09秒
2. WHERE子句中的連線順序
由於ORACLE解析器按照從右到左的順序處理,所以那些可以過濾掉最大數量記錄的條件必須寫在WHERE子句的末尾。
EXP:
(低效,執行時間156.3秒)
SELECT … FROM EMP E
WHERE SAL >50000
AND JOB = ‘MANAGER’
AND 25 < (SELECT COUNT(*) FROM EMP);
WHERE MGR=E.EMPNO)
(高效,執行時間10.6秒)
SELECT … FROM EMP E
WHERE 25 < (SELECT COUNT(*) FROM EMP WHERE MGR=E.EMPNO)
AND SAL >50000
AND JOB = ‘MANAGER’
3. 減少訪問資料庫的次數
當執行每條SQL語句時, ORACLE在內部執行了許多工作:
解析SQL語句,估算索引的利用率,繫結變數, 讀資料塊等等. 由此可見, 減少訪問資料庫的次數 , 就能實際上減少ORACLE的工作量。
4. 高效的刪除重複記錄
最高效的刪除重複記錄方法 ( 因為使用了ROWID)
EXP:
DELETE FROM EMP E
WHERE E.ROWID > (SELECT MIN(X.ROWID)
FROM EMP X
WHERE X.EMP_NO = E.EMP_NO);
5. 用TRUNCATE替代DELETE
Truncate–DDL
Delete—-DML
6. 儘量多使用COMMIT
COMMIT所釋放的資源:
A、回滾段上用於恢復資料的資訊.
B、被程式語句獲得的鎖
C、redo log buffer 中的空間
D、ORACLE為管理上述3種資源中的內部花費
NOTE: 在使用COMMIT時必須要注意到事務的完整性,現實中效率和事務完整性往往是魚和熊掌不可得兼。
7. 用Where子句替換HAVING子句
避免使用HAVING子句,HAVING 只會在檢索出所有記錄之後才對結果集進行過濾,這個處理需要排序、總計等操作。
WHERE子句限制記錄的數目,能減少這方面的開銷。
8. 避免在索引列上使用NOT
使用NOT, 會停止使用索引轉而執行全表掃描.
EXP:
低效: (這裡,不使用索引)
SELECT … FROM DEPT WHERE NOT DEPT_CODE = 0;
高效: (這裡,使用了索引)
SELECT … FROM DEPT WHERE DEPT_CODE > 0;
需要注意的是,在某些時候,ORACLE優化器會自動將NOT轉化成相對應的關係操作符.
NOT > to <=
NOT >= to <
NOT =
NOT <= to >
衍生出去的另一個調優及為用>=替代>。兩者的區別在於, 前者DBMS將直接跳到第一個DEPT等於4的記錄而後者將首先定位到DEPTNO=3的記錄並且向前掃描到第一個DEPT大於3的記錄。
Jason之後會介紹如何利用ORACLE相關的工具進行調優,調優無止境,方法才是硬道理
———EOF———
作者: 吳穎敏 | www.futurehandw.com
Email: wuyingminhui@gmail.com
轉載請註明來源:吳穎敏 - www.futurehandw.com
相關文章
- Oracle SQL調優系列之SQL Monitor ReportOracleSQL
- Oracle SQL調優之分割槽表OracleSQL
- SQL調優SQL
- oracle sql tuning 2--調優工具OracleSQL
- oracle筆記整理13——效能調優之SQL優化Oracle筆記SQL優化
- sql調優1SQL
- Oracle 調優確定存在問題的SQLOracleSQL
- ORACLE SQL調優之'PLAN_TABLE' is old versionOracleSQL
- Oracle 高效能SQL引擎剖析--SQL優化與調優機制詳解OracleSQL優化
- MySQL調優篇 | SQL調優實戰(5)MySql
- Oracle PL/SQL 優化與調整 -- Bulk 說明OracleSQL優化
- Teradata SQL調優SQL
- 如何調優 Oracle SQL系列文章:查詢優化器介紹OracleSQL優化
- ORACLE調優方法Oracle
- oracle效能調優Oracle
- MySQL索引和SQL調優MySql索引
- SQL調優真實案例SQL
- SQL效能調優綜述SQL
- [精華zt] SQL調優整理SQL
- Oracle PL/SQL 優化與調整 – PL/SQL Native Compilation 說明OracleSQL優化
- SQL Server一次SQL調優案例SQLServer
- Oracle中SQL調優(SQL TUNING)之最權威獲取SQL執行計劃大全OracleSQL
- Oracle常用調優手段Oracle
- Oracle 調優總結Oracle
- 淺談Oracle調優Oracle
- Oracle調優總結Oracle
- oracle的調優(轉)Oracle
- Oracle 效能調優 概述Oracle
- oracle sql優化OracleSQL優化
- oracle sql 優化OracleSQL優化
- SQL 調優一般思路SQL
- 【sql調優】動態取樣SQL
- 一條大sql的調優SQL
- 效能調優——SQL最佳化SQL
- Oracle常用調優手段[轉]Oracle
- Oracle效能調優原則Oracle
- 【Oracle】undo 自動調優Oracle
- Oracle專家調優秘密Oracle