如何获取真实的执行计划
?驗證?explain?plan命令???與??set?autotrace命令??是否為真實執行計劃
??????0??CONN?/AS?SYSDBA;?????
?
??????1??create?table?t1?as?select?*?from?dba_objects;
???
??????2??insert?into?t1?select?*?from?t1;
?
??????3???commit;
?
??????4???select?count(1)?from?t1;
?
??????5???create?index?idx_t1?on?t1(object_id);
????????--收集統計信息
??????6???exec?dbms_stats.gather_table_stats(ownname=>'SYS',tabname=>'T1',estimate_percent=>?100,cascade=>?true);
??????
??????7???select?*?from?table(dbms_xplan.display);
?
??????
?
?????
??????8?
????
VAR?X?NUMBER;
VAR?Y?NUMBER;
EXEC?:X?:=0;
EXEC:Y?:=100000;
?
????????--explain命令
????????EXPLAIN??PLAN?FOR?SELECT?count(*)?from?t1?where?object_id?between?:x?and?:y;
?
????????select?*?from?table(dbms_xplan.display);
?
???????
?
??????????顯示走idx_t1索引范圍(range)掃描
?
????????select?count(*)?from?t1?where?object_id?between?:x?and?:y;
?
????????--dbms_xplan.display_cursor(null,null,'ADVANCED')??得到真實執行計劃
????????select?*?from?table(dbms_xplan.display_cursor(null,null,'ADVANCED'));
?
?
?
?
?
????????
Index?fast?full??快速全掃描
?
?
---set?autotrace?traceonly?驗證
?
Set?autotrace?traceonly
Select?count(*)?from?t1?where?object_id?between?:x?and?:y;
?
?顯示走idx_t1索引范圍(range)掃描
?
結論:使用set?autotrace,set?autotrace?源于explain?plan是不準確的,特別是綁定變量下查詢是不準確的
-dbms_xplan.display_cursor(null,null,'ADVANCED')?
和10046事件獲取真實的執行計劃
轉載于:https://www.cnblogs.com/kool/p/6695597.html
總結
以上是生活随笔為你收集整理的如何获取真实的执行计划的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 编程技巧及博客资源
- 下一篇: 标准非STL容器 : bitset