oracle用EXPLAIN PLAN 分析SQL语句
EXPLAIN PLAN 是一個很好的分析SQL語句的工具,它甚至可以在不執行SQL的情況下分析語句. 通過分析,我們就可以知道ORACLE是怎么樣連接表,使用什么方式掃描表(索引掃描或全表掃描)以及使用到的索引名稱.
你需要按照從里到外,從上到下的次序解讀分析的結果. EXPLAIN PLAN分析的結果是用縮進的格式排列的, 最內部的操作將被最先解讀, 如果兩個操作處于同一層中,帶有最小操作號的將被首先執行.
NESTED LOOP是少數不按照上述規則處理的操作, 正確的執行路徑是檢查對NESTED LOOP提供數據的操作,其中操作號最小的將被最先處理.
?
?通過實踐, 感到還是用SQLPLUS中的SET TRACE 功能比較方便.
舉例:
?SQL> list
? 1? SELECT *
? 2? FROM dept, emp
? 3* WHERE emp.deptno = dept.deptno
SQL> set autotrace traceonly /*traceonly 可以不顯示執行結果*/
SQL> /
14 rows selected.
Execution Plan
----------------------------------------------------------
?? 0????? SELECT STATEMENT Optimizer=CHOOSE
?? 1??? 0?? NESTED LOOPS
?? 2??? 1???? TABLE ACCESS (FULL) OF 'EMP'
?? 3??? 1???? TABLE ACCESS (BY INDEX ROWID) OF 'DEPT'
?? 4??? 3?????? INDEX (UNIQUE SCAN) OF 'PK_DEPT' (UNIQUE)
Statistics
----------------------------------------------------------
????????? 0? recursive calls
????????? 2? db block gets
???????? 30? consistent gets
????????? 0? physical reads
????????? 0? redo size
?????? 2598? bytes sent via SQL*Net to client
??????? 503? bytes received via SQL*Net from client
????????? 2? SQL*Net roundtrips to/from client
????????? 0? sorts (memory)
????????? 0? sorts (disk)
???????? 14? rows processed
通過以上分析,可以得出實際的執行步驟是:
1.?????? TABLE ACCESS (FULL) OF 'EMP'
2.?????? INDEX (UNIQUE SCAN) OF 'PK_DEPT' (UNIQUE)
3.?????? TABLE ACCESS (BY INDEX ROWID) OF 'DEPT'
4.?????? NESTED LOOPS (JOINING 1 AND 3)
注: 目前許多第三方的工具如TOAD和ORACLE本身提供的工具如OMS的SQL Analyze都提供了極其方便的EXPLAIN PLAN工具.也許喜歡圖形化界面的朋友們可以選用它們.
轉載于:https://www.cnblogs.com/fanweisheng/p/11124737.html
總結
以上是生活随笔為你收集整理的oracle用EXPLAIN PLAN 分析SQL语句的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 百度蜘蛛(BaiduSpider)IP段
- 下一篇: 我的GMAIL下蛋了,要的请留下姓,名和