ORACLE SQL性能優(yōu)化系列(完整版)_第1頁(yè)
ORACLE SQL性能優(yōu)化系列(完整版)_第2頁(yè)
ORACLE SQL性能優(yōu)化系列(完整版)_第3頁(yè)
ORACLE SQL性能優(yōu)化系列(完整版)_第4頁(yè)
ORACLE SQL性能優(yōu)化系列(完整版)_第5頁(yè)
已閱讀5頁(yè),還剩52頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、標(biāo)題標(biāo)題 ORACLE SQL 性能優(yōu)化系列性能優(yōu)化系列 black_snail(翻譯)(翻譯) 關(guān)鍵字關(guān)鍵字 ORACEL SQL Performance tuning 出處出處 ORACLE SQL 性能優(yōu)化系列性能優(yōu)化系列 1. 選用適合的 ORACLE 優(yōu)化器.2 2. 訪問(wèn) Table 的方式 .3 3. 共享 SQL 語(yǔ)句.3 4. 選擇最有效率的表名順序(只在基于規(guī)則的優(yōu)化器中有效).6 5. WHERE 子句中的連接順序 .7 6. SELECT 子句中避免使用 * .8 7. 減少訪問(wèn)數(shù)據(jù)庫(kù)的次數(shù).9 8. 使用 DECODE 函數(shù)來(lái)減少處理時(shí)間.10 9. 整合簡(jiǎn)單,無(wú)關(guān)聯(lián)

2、的數(shù)據(jù)庫(kù)訪問(wèn).11 10. 刪除重復(fù)記錄.13 11. 用 TRUNCATE 替代 DELETE.13 12. 盡量多使用 COMMIT.13 13. 計(jì)算記錄條數(shù).14 14. 用 Where 子句替換 HAVING 子句.14 15. 減少對(duì)表的查詢.15 16. 通過(guò)內(nèi)部函數(shù)提高 SQL 效率.16 17. 使用表的別名(Alias) .18 18. 用 EXISTS 替代 IN.18 19. 用 NOT EXISTS 替代 NOT IN .19 20. 用表連接替換 EXISTS.20 21. 用 EXISTS 替換 DISTINCT.21 22. 識(shí)別低效執(zhí)行的 SQL 語(yǔ)句.22

3、23. 使用 TKPROF 工具來(lái)查詢 SQL 性能狀態(tài).22 24. 用 EXPLAIN PLAN 分析 SQL 語(yǔ)句 .23 25. 用索引提高效率.25 26. 索引的操作.26 27. 基礎(chǔ)表的選擇.28 28. 多個(gè)平等的索引.29 29. 等式比較和范圍比較.29 30. 不明確的索引等級(jí).30 31. 強(qiáng)制索引失效.32 32.避免在索引列上使用計(jì)算.33 33. 自動(dòng)選擇索引.34 34. 避免在索引列上使用 NOT.34 35. 用=替代.36 36. 用 UNION 替換 OR (適用于索引列).37 37. 用 IN 來(lái)替換 OR.41 38. 避免在索引列上使用 IS

4、NULL 和 IS NOT NULL.42 39. 總是使用索引的第一個(gè)列.43 40. ORACLE 內(nèi)部操作.44 41. 用 UNION-ALL 替換 UNION ( 如果有可能的話).44 42. 使用提示(Hints).46 43. 用 WHERE 替代 ORDER BY.47 44. 避免改變索引列的類型.49 45. 需要當(dāng)心的 WHERE 子句.50 46. 連接多個(gè)掃描.52 47. CBO 下使用更具選擇性的索引.53 48. 避免使用耗費(fèi)資源的操作.54 49. 優(yōu)化 GROUP BY .55 50. 使用日期.55 51. 使用顯式的游標(biāo)(CURSORs) .56 52

5、. 優(yōu)化 EXPORT 和 IMPORT.56 53. 分離表和索引.57 1. 選用適合的選用適合的 ORACLE 優(yōu)化器優(yōu)化器 ORACLE 的優(yōu)化器共有 3 種: a. RULE (基于規(guī)則) b. COST (基于成本) c. CHOOSE (選擇性) 設(shè)置缺省的優(yōu)化器,可以通過(guò)對(duì) init.ora 文件中 OPTIMIZER_MODE 參數(shù)的各種聲明,如 RULE,COST,CHOOSE,ALL_ROWS,FIRST_ROWS . 你當(dāng)然也在 SQL 句級(jí)或是會(huì)話(session)級(jí) 對(duì)其進(jìn)行覆蓋. 為了使用基于成本的優(yōu)化器(CBO, Cost-Based Optimizer) ,

6、你必須經(jīng)常運(yùn)行 analyze 命令,以 增加數(shù)據(jù)庫(kù)中的對(duì)象統(tǒng)計(jì)信息(object statistics)的準(zhǔn)確性. 如果數(shù)據(jù)庫(kù)的優(yōu)化器模式設(shè)置為選擇性(CHOOSE),那么實(shí)際的優(yōu)化器模式將和是否運(yùn)行 過(guò) analyze 命令有關(guān). 如果 table 已經(jīng)被 analyze 過(guò), 優(yōu)化器模式將自動(dòng)成為 CBO , 反之,數(shù) 據(jù)庫(kù)將采用 RULE 形式的優(yōu)化器. 在缺省情況下,ORACLE 采用 CHOOSE 優(yōu)化器, 為了避免那些不必要的全表掃描(full table scan) , 你必須盡量避免使用 CHOOSE 優(yōu)化器,而直接采用基于規(guī)則或者基于成本的優(yōu) 化器. 2. 訪問(wèn)訪問(wèn) Tab

7、le 的方式的方式 ORACLE 采用兩種訪問(wèn)表中記錄的方式: a. 全表掃描 全表掃描就是順序地訪問(wèn)表中每條記錄. ORACLE 采用一次讀入多個(gè)數(shù)據(jù)塊 (database block)的方式優(yōu)化全表掃描. b. 通過(guò) ROWID 訪問(wèn)表 你可以采用基于 ROWID 的訪問(wèn)方式情況,提高訪問(wèn)表的效率, , ROWID 包含了 表中記錄的物理位置信息.ORACLE 采用索引(INDEX)實(shí)現(xiàn)了數(shù)據(jù)和存放數(shù)據(jù)的物理位 置(ROWID)之間的聯(lián)系. 通常索引提供了快速訪問(wèn) ROWID 的方法,因此那些基于索引 列的查詢就可以得到性能上的提高. 3. 共享共享 SQL 語(yǔ)句語(yǔ)句 為了不重復(fù)解析相同的

8、 SQL 語(yǔ)句,在第一次解析之后, ORACLE 將 SQL 語(yǔ)句存放在內(nèi) 存中.這塊位于系統(tǒng)全局區(qū)域 SGA(system global area)的共享池(shared buffer pool)中的內(nèi)存 可以被所有的數(shù)據(jù)庫(kù)用戶共享. 因此,當(dāng)你執(zhí)行一個(gè) SQL 語(yǔ)句(有時(shí)被稱為一個(gè)游標(biāo))時(shí),如果 它 和之前的執(zhí)行過(guò)的語(yǔ)句完全相同, ORACLE 就能很快獲得已經(jīng)被解析的語(yǔ)句以及最好的 執(zhí)行路徑. ORACLE 的這個(gè)功能大大地提高了 SQL 的執(zhí)行性能并節(jié)省了內(nèi)存的使用. 可惜的是 ORACLE 只對(duì)簡(jiǎn)單的表提供高速緩沖(cache buffering) ,這個(gè)功能并不適用于 多表連接查詢

9、. 數(shù)據(jù)庫(kù)管理員必須在 init.ora 中為這個(gè)區(qū)域設(shè)置合適的參數(shù),當(dāng)這個(gè)內(nèi)存區(qū)域越大,就可 以保留更多的語(yǔ)句,當(dāng)然被共享的可能性也就越大了. 當(dāng)你向 ORACLE 提交一個(gè) SQL 語(yǔ)句,ORACLE 會(huì)首先在這塊內(nèi)存中查找相同的語(yǔ)句. 這里需要注明的是,ORACLE 對(duì)兩者采取的是一種嚴(yán)格匹配,要達(dá)成共享,SQL 語(yǔ)句必須 完全相同(包括空格,換行等). 共享的語(yǔ)句必須滿足三個(gè)條件: A. 字符級(jí)的比較: 當(dāng)前被執(zhí)行的語(yǔ)句和共享池中的語(yǔ)句必須完全相同. 例如: SELECT * FROM EMP; 和下列每一個(gè)都不同 SELECT * from EMP; Select * From Em

10、p; SELECT * FROM EMP; B. 兩個(gè)語(yǔ)句所指的對(duì)象必須完全相同: 例如: 用戶對(duì)象名如何訪問(wèn) Jacksal_limitprivate synonym Work_citypublic synonym Plant_detailpublic synonym Jillsal_limitprivate synonym Work_citypublic synonym Plant_detailtable owner 考慮一下下列 SQL 語(yǔ)句能否在這兩個(gè)用戶之間共享. SQL能否共享能否共享原因原因 select max(sal_cap) from sal_limit;不能 每個(gè)用戶都有

11、一個(gè) private synonym - sal_limit , 它們是不同 的對(duì)象 select count(*0 from work_city where sdesc like NEW%; 能 兩個(gè)用戶訪問(wèn)相同的對(duì)象 public synonym - work_city select a.sdesc,b.location from work_city a , plant_detail b where a.city_id = b.city_id 不能 用戶 jack 通過(guò) private synonym 訪 問(wèn) plant_detail 而 jill 是表的所有 者,對(duì)象不同. C. 兩個(gè)

12、SQL 語(yǔ)句中必須使用相同的名字的綁定變量(bind variables) 例如: 第一組的兩個(gè) SQL 語(yǔ)句是相同的(可以共享),而第二組中的兩個(gè)語(yǔ)句是不同的(即 使在運(yùn)行時(shí),賦于不同的綁定變量相同的值) a. select pin , name from people where pin = :blk1.pin; select pin , name from people where pin = :blk1.pin; b. select pin , name from people where pin = :blk1.ot_ind; select pin , name from peopl

13、e where pin = :blk1.ov_ind; 4. 選擇最有效率的表名順序選擇最有效率的表名順序(只在基于只在基于 規(guī)則的優(yōu)化器中有效規(guī)則的優(yōu)化器中有效) ORACLE 的解析器按照從右到左的順序處理的解析器按照從右到左的順序處理 FROM 子句中的表名子句中的表名,因此 FROM 子句 中寫在最后的表(基礎(chǔ)表 driving table)將被最先處理. 在 FROM 子句中包含多個(gè)表的情況下,你 必須選擇記錄條數(shù)最少的表作為基礎(chǔ)表.當(dāng) ORACLE 處理多個(gè)表時(shí), 會(huì)運(yùn)用排序及合并的方 式連接它們.首先,掃描第一個(gè)表(FROM 子句中最后的那個(gè)表)并對(duì)記錄進(jìn)行派序,然后掃描第 二個(gè)

14、表(FROM 子句中最后第二個(gè)表),最后將所有從第二個(gè)表中檢索出的記錄與第一個(gè)表中 合適記錄進(jìn)行合并. 例如: 表 TAB1 16,384 條記錄 表 TAB2 1 條記錄 選擇 TAB2 作為基礎(chǔ)表 (最好的方法) select count(*) from tab1,tab2 執(zhí)行時(shí)間 0.96 秒 選擇 TAB2 作為基礎(chǔ)表 (不佳的方法) select count(*) from tab2,tab1 執(zhí)行時(shí)間 26.09 秒 如果有 3 個(gè)以上的表連接查詢, 那就需要選擇交叉表(intersection table)作為基礎(chǔ)表, 交叉表 是指那個(gè)被其他表所引用的表. 例如: EMP 表描

15、述了 LOCATION 表和 CATEGORY 表的交集. SELECT * FROM LOCATION L , CATEGORY C, EMP E WHERE E.EMP_NO BETWEEN 1000 AND 2000 AND E.CAT_NO = C.CAT_NO AND E.LOCN = L.LOCN 將比下列 SQL 更有效率 SELECT * FROM EMP E , LOCATION L , CATEGORY C WHERE E.CAT_NO = C.CAT_NO AND E.LOCN = L.LOCN AND E.EMP_NO BETWEEN 1000 AND 2000 5.

16、WHERE 子句中的連接順序子句中的連接順序 ORACLE 采用自下而上的順序解析采用自下而上的順序解析 WHERE 子句子句,根據(jù)這個(gè)原理,表之間的連接必須寫 在其他 WHERE 條件之前, 那些可以過(guò)濾掉最大數(shù)量記錄的條件必須寫在 WHERE 子 句的末尾. 例如: (低效,執(zhí)行時(shí)間 156.3 秒) SELECT FROM EMP E WHERE SAL 50000 AND JOB = MANAGER AND 25 (SELECT MIN(X.ROWID) FROM EMP X WHERE X.EMP_NO = E.EMP_NO); 11. 用用 TRUNCATE 替代替代 DELETE

17、 當(dāng)刪除表中的記錄時(shí),在通常情況下, 回滾段(rollback segments ) 用來(lái)存放可以被恢復(fù)的 信息. 如果你沒(méi)有 COMMIT 事務(wù),ORACLE 會(huì)將數(shù)據(jù)恢復(fù)到刪除之前的狀態(tài)(準(zhǔn)確地說(shuō) 是 恢復(fù)到執(zhí)行刪除命令之前的狀況) 而當(dāng)運(yùn)用 TRUNCATE 時(shí), 回滾段不再存放任何可被恢復(fù)的信息.當(dāng)命令運(yùn)行后,數(shù)據(jù)不 能被恢復(fù).因此很少的資源被調(diào)用,執(zhí)行時(shí)間也會(huì)很短. (譯者按譯者按: TRUNCATE 只在刪除全表適用只在刪除全表適用,TRUNCATE 是是 DDL 不是不是 DML) 12. 盡量多使用盡量多使用 COMMIT 只要有可能,在程序中盡量多使用 COMMIT, 這樣程

18、序的性能得到提高,需求也會(huì)因?yàn)?COMMIT 所釋放的資源而減少: COMMIT 所釋放的資源: a. 回滾段上用于恢復(fù)數(shù)據(jù)的信息. b. 被程序語(yǔ)句獲得的鎖 c. redo log buffer 中的空間 d. ORACLE 為管理上述 3 種資源中的內(nèi)部花費(fèi) (譯者按譯者按: 在使用在使用 COMMIT 時(shí)必須要注意到事務(wù)的完整性時(shí)必須要注意到事務(wù)的完整性,現(xiàn)實(shí)中效率和事務(wù)完整性往現(xiàn)實(shí)中效率和事務(wù)完整性往 往是魚和熊掌不可得兼往是魚和熊掌不可得兼) 13. 計(jì)算記錄條數(shù)計(jì)算記錄條數(shù) 和一般的觀點(diǎn)相反, count(*) 比 count(1)稍快 , 當(dāng)然如果可以通過(guò)索引檢索,對(duì)索引列 的計(jì)

19、數(shù)仍舊是最快的. 例如 COUNT(EMPNO) (譯者按譯者按: 在在 CSDN 論壇中論壇中,曾經(jīng)對(duì)此有過(guò)相當(dāng)熱烈的討論曾經(jīng)對(duì)此有過(guò)相當(dāng)熱烈的討論, 作者的觀點(diǎn)并不十分準(zhǔn)確作者的觀點(diǎn)并不十分準(zhǔn)確,通通 過(guò)實(shí)際的測(cè)試過(guò)實(shí)際的測(cè)試,上述三種方法并沒(méi)有顯著的性能差別上述三種方法并沒(méi)有顯著的性能差別) 14. 用用 Where 子句替換子句替換 HAVING 子句子句 避免使用 HAVING 子句, HAVING 只會(huì)在檢索出所有記錄之后才對(duì)結(jié)果集進(jìn)行過(guò)濾. 這個(gè)處理需要排序,總計(jì)等操作. 如果能通過(guò) WHERE 子句限制記錄的數(shù)目,那就能減少這方 面的開銷. 例如: 低效: SELECT REG

20、ION,AVG(LOG_SIZE) FROM LOCATION GROUP BY REGION HAVING REGION REGION != SYDNEY AND REGION != PERTH 高效 SELECT REGION,AVG(LOG_SIZE) FROM LOCATION WHERE REGION REGION != SYDNEY AND REGION != PERTH GROUP BY REGION (譯者按譯者按: HAVING 中的條件一般用于對(duì)一些集合函數(shù)的比較中的條件一般用于對(duì)一些集合函數(shù)的比較,如如 COUNT() 等等等等. 除此而除此而 外外,一般的條件應(yīng)該寫在一

21、般的條件應(yīng)該寫在 WHERE 子句中子句中) 15. 減少對(duì)表的查詢減少對(duì)表的查詢 在含有子查詢的 SQL 語(yǔ)句中,要特別注意減少對(duì)表的查詢. 例如: 低效 SELECT TAB_NAME FROM TABLES WHERE TAB_NAME = ( SELECT TAB_NAME FROM TAB_COLUMNS WHERE VERSION = 604) AND DB_VER= ( SELECT DB_VER FROM TAB_COLUMNS WHERE VERSION = 604) 高效 SELECT TAB_NAME FROM TABLES WHERE (TAB_NAME,DB_VER)

22、 = ( SELECT TAB_NAME,DB_VER) FROM TAB_COLUMNS WHERE VERSION = 604) Update 多個(gè) Column 例子: 低效: UPDATE EMP SET EMP_CAT = (SELECT MAX(CATEGORY) FROM EMP_CATEGORIES), SAL_RANGE = (SELECT MAX(SAL_RANGE) FROM EMP_CATEGORIES) WHERE EMP_DEPT = 0020; 高效: UPDATE EMP SET (EMP_CAT, SAL_RANGE) = (SELECT MAX(CATEGO

23、RY) , MAX(SAL_RANGE) FROM EMP_CATEGORIES) WHERE EMP_DEPT = 0020; 16. 通過(guò)內(nèi)部函數(shù)提高通過(guò)內(nèi)部函數(shù)提高 SQL 效率效率 SELECT H.EMPNO,E.ENAME,H.HIST_TYPE,T.TYPE_DESC,COUNT(*) FROM HISTORY_TYPE T,EMP E,EMP_HISTORY H WHERE H.EMPNO = E.EMPNO AND H.HIST_TYPE = T.HIST_TYPE GROUP BY H.EMPNO,E.ENAME,H.HIST_TYPE,T.TYPE_DESC; 通過(guò)調(diào)用下

24、面的函數(shù)可以提高效率. FUNCTION LOOKUP_HIST_TYPE(TYP IN NUMBER) RETURN VARCHAR2 AS TDESC VARCHAR2(30); CURSOR C1 IS SELECT TYPE_DESC FROM HISTORY_TYPE WHERE HIST_TYPE = TYP; BEGIN OPEN C1; FETCH C1 INTO TDESC; CLOSE C1; RETURN (NVL(TDESC,?); END; FUNCTION LOOKUP_EMP(EMP IN NUMBER) RETURN VARCHAR2 AS ENAME VARC

25、HAR2(30); CURSOR C1 IS SELECT ENAME FROM EMP WHERE EMPNO=EMP; BEGIN OPEN C1; FETCH C1 INTO ENAME; CLOSE C1; RETURN (NVL(ENAME,?); END; SELECT H.EMPNO,LOOKUP_EMP(H.EMPNO), H.HIST_TYPE,LOOKUP_HIST_TYPE(H.HIST_TYPE),COUNT(*) FROM EMP_HISTORY H GROUP BY H.EMPNO , H.HIST_TYPE; (譯者按譯者按: 經(jīng)常在論壇中看到如經(jīng)常在論壇中看到如

26、 能不能用一個(gè)能不能用一個(gè) SQL 寫出寫出. 的貼子的貼子, 殊不知復(fù)雜的殊不知復(fù)雜的 SQL 往往犧牲了執(zhí)行效率往往犧牲了執(zhí)行效率. 能夠掌握上面的運(yùn)用函數(shù)解決問(wèn)題的方法在實(shí)際工作中是非常有意能夠掌握上面的運(yùn)用函數(shù)解決問(wèn)題的方法在實(shí)際工作中是非常有意 義的義的) (待續(xù)) 17. 使用表的別名使用表的別名(Alias) 當(dāng)在 SQL 語(yǔ)句中連接多個(gè)表時(shí), 請(qǐng)使用表的別名并把別名前綴于每個(gè) Column 上.這樣 一來(lái),就可以減少解析的時(shí)間并減少那些由 Column 歧義引起的語(yǔ)法錯(cuò)誤. (譯者注譯者注: Column 歧義指的是由于歧義指的是由于 SQL 中不同的表具有相同的中不同的表具有

27、相同的 Column 名名,當(dāng)當(dāng) SQL 語(yǔ)句中語(yǔ)句中 出現(xiàn)這個(gè)出現(xiàn)這個(gè) Column 時(shí)時(shí),SQL 解析器無(wú)法判斷這個(gè)解析器無(wú)法判斷這個(gè) Column 的歸屬的歸屬) 18. 用用 EXISTS 替代替代 IN 在許多基于基礎(chǔ)表的查詢中,為了滿足一個(gè)條件,往往需要對(duì)另一個(gè)表進(jìn)行聯(lián)接.在這種情 況下, 使用 EXISTS(或 NOT EXISTS)通常將提高查詢的效率. 低效: SELECT * FROM EMP (基礎(chǔ)表) WHERE EMPNO 0 AND DEPTNO IN (SELECT DEPTNO FROM DEPT WHERE LOC = MELB) 高效: SELECT * F

28、ROM EMP (基礎(chǔ)表) WHERE EMPNO 0 AND EXISTS (SELECT X FROM DEPT WHERE DEPT.DEPTNO = EMP.DEPTNO AND LOC = MELB) (譯者按譯者按: 相對(duì)來(lái)說(shuō)相對(duì)來(lái)說(shuō),用用 NOT EXISTS 替換替換 NOT IN 將更顯著地提高效率將更顯著地提高效率,下一節(jié)中將指出下一節(jié)中將指出) 19. 用用 NOT EXISTS 替代替代 NOT IN 在子查詢中,NOT IN 子句將執(zhí)行一個(gè)內(nèi)部的排序和合并. 無(wú)論在哪種情況下,NOT IN 都 是最低效的 (因?yàn)樗鼘?duì)子查詢中的表執(zhí)行了一個(gè)全表遍歷). 為了避免使用 N

29、OT IN ,我 們可以把它改寫成外連接(Outer Joins)或 NOT EXISTS. 例如: SELECT FROM EMP WHERE DEPT_NO NOT IN (SELECT DEPT_NO FROM DEPT WHERE DEPT_CAT=A); 為了提高效率.改寫為: (方法一: 高效) SELECT . FROM EMP A,DEPT B WHERE A.DEPT_NO = B.DEPT(+) AND B.DEPT_NO IS NULL AND B.DEPT_CAT(+) = A (方法二: 最高效) SELECT . FROM EMP E WHERE NOT EXIST

30、S (SELECT X FROM DEPT D WHERE D.DEPT_NO = E.DEPT_NO AND DEPT_CAT = A); (待續(xù)) 20. 用表連接替換用表連接替換 EXISTS 通常來(lái)說(shuō) , 采用表連接的方式比 EXISTS 更有效率 SELECT ENAME FROM EMP E WHERE EXISTS (SELECT X FROM DEPT WHERE DEPT_NO = E.DEPT_NO AND DEPT_CAT = A); (更高效) SELECT ENAME FROM DEPT D,EMP E WHERE E.DEPT_NO = D.DEPT_NO AND

31、DEPT_CAT = A ; (譯者按譯者按: 在在 RBO 的情況下的情況下,前者的執(zhí)行路徑包括前者的執(zhí)行路徑包括 FILTER,后者使用后者使用 NESTED LOOP) 21. 用用 EXISTS 替換替換 DISTINCT 當(dāng)提交一個(gè)包含一對(duì)多表信息(比如部門表和雇員表)的查詢時(shí),避免在 SELECT 子句中 使用 DISTINCT. 一般可以考慮用 EXIST 替換 例如: 低效: SELECT DISTINCT DEPT_NO,DEPT_NAME FROM DEPT D,EMP E WHERE D.DEPT_NO = E.DEPT_NO 高效: SELECT DEPT_NO,DEP

32、T_NAME FROM DEPT D WHERE EXISTS ( SELECT X FROM EMP E WHERE E.DEPT_NO = D.DEPT_NO); EXISTS 使查詢更為迅速,因?yàn)?RDBMS 核心模塊將在子查詢的條件一旦滿足后,立 刻返回結(jié)果. 22. 識(shí)別識(shí)別低效執(zhí)行低效執(zhí)行的的 SQL 語(yǔ)句語(yǔ)句 用下列 SQL 工具找出低效 SQL: SELECT EXECUTIONS , DISK_READS, BUFFER_GETS, ROUND(BUFFER_GETS-DISK_READS)/BUFFER_GETS,2) Hit_radio, ROUND(DISK_READS/EXECUTIONS,2) Reads_per_run, SQL_TEXT FROM V$SQLAREA WHERE EXECUTIONS0 AND BUFFER_GETS 0 AND (BUFFER_GETS-DISK_READS)/BUFFER_GETS list 1 SELECT * 2 FROM dept, emp 3* WHERE emp.deptno = dept.deptno SQL set autotrace traceonly /*traceonly 可以不顯示執(zhí)行結(jié)果可以不顯示執(zhí)行結(jié)果*/ SQL / 14 rows selected. Execution Plan -

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論