查看执行计划:
方法一:选中需查看执行计划的SQL语句 然后按 F5 效果图如下:
方法二:1.执行 EXPLAIN PLAN FOR +需查看执行计划的SQL语句
2.执行 select * from table(dbms_xplan.display)
效果图如下:
以上执行计划中各列的意义如下
id:序号(id的大小不代表执行的先后顺序)
Operation:操作内容
Rows:当前操作的cardinality,数据库估算当前返回结果集的行数,这个行源可能是一个表,一个索引,也有可能是一个子查询。
Bytes:当前操作的数据量的大小
Cost(%CPU):数据库计算出来的一个数值,用于说明SQL执行的代价。
Time:数据库估算当前操作所需要的时间
access:表示谓词条件的值会影响数据的访问路径(表还是索引,这里是索引)
如果是filter则表示谓词条件的值只起到过滤的作用 并不会影响数据访问路径
---------------------------------------------------------测试例子------------------------------------------------------------------------------------------------
执行未优化代码
EXPLAIN PLAN FOR
select s_code,site_name,su_site from tb_site ts ,tb_bill tb where ts.site_name=tb.send_site
执行select * from table(dbms_xplan.display) 效果图如下
执行优化代码
EXPLAIN PLAN FOR
select s_code,site_name,su_site from tb_site ts
where exists(select 'X' from tb_bill tb where ts.site_name=tb.send_site)
执行 select * from table(dbms_xplan.display)效果图如下:
由上两图对比可见
未优化SQL 的Rows为4342 (与统计查询结果一样)
优化后SQL的ROWs为169
如此可见
rows 的多少直接影响了执行计划访问数据的选择 是选择使用索引还是使用全表扫描的方式