代码改变世界

Miley's Oracle讲堂第一课:怎么使用dbms_xplan.display_cursor观察执行计划.

2010-04-16 10:14  Tracy.  阅读(2863)  评论(0编辑  收藏  举报

在实际使用中,很少有文章介绍如何看执行计划的.本文希望能抛砖引玉,给大家介绍下这方面的内容。

首先,从oracle10g开始,oracle开始提供一个新功能dbms_xplan.display_cursor,我们不需要考虑看什么plan_table还是v$sql_plan了。当然你使用这个功能你需要有这些视图“v$session”, “v$sql”, “v$sql_plan” and “v$sql_plan_statistics_all ”的查看权限.

然后,我们通过/*+ gather_plan_statistics*/ 这个提示SQL 1.拿到我们需要生成的统计信息,执行SQL 2.会看到如下2个截图的信息。

SQL 1.

select /*+ gather_plan_statistics*/ * from tms_route_header rh , tms_route_stop rs where rh.host_created_dt>sysdate-1  and rs.truck_route_instance_id=rh.truck_route_instance_id

and exists(select  1 from tms_stop_detail sd where sd.stop_id=rs.stop_id)

SQL 2.

select * from table(dbms_xplan.display_cursor(null,null,'all iostats last'))

 

 这个截图1真实反映了筛选的路径及rows的选择。

首先,这个顺序是按照4-3-6-5-2-7-1。

注意主要观察Starts,A-rows这2列。仔细观察,首先4的步骤返回7条,然后到3,然后3跑到步骤6,6返回43条,然后到5,5然后返回2,2的43条作为starts纪录跑去步骤7,得到14条最终结果。

 截图2则真实反映了每个步骤怎么过滤数据的,通过我的这番解释,希望能让大家提高对SQL计划的进一步认识,我还会有更多内容与大家分享。

 

截图1:

 

 截图2: