oracle执行计划



一、执行计划定义
所谓执行计划,顾名思义,就是对一个查询任务,做出一份怎样去完成任务的详细方案。举个生活中的例子,我从珠海要去英国,我可以选择先去香港然后转机,也可以先去北京转机,或者去广州也可以。但是到底怎样去英国划算,也就是我的费用最少,这是一件值得考究的事情。同样对于查询而言,我们提交的SQL仅仅是描述出了我们的目的地是英国,但至于怎么去,通常我们的SQL中是没有给出提示信息的,是由数据库来决定的。
我们先简单的看一个执行计划的对比:

 

SQL> set autotrace traceonly


--执行计划一:

  
SQL> select count(*) from t; 


COUNT(*)
  
----------
  
24815
  
Execution Plan
  
0   SELECT STATEMENT Optimizer=CHOOSE
  
1  0  SORT (AGGREGATE)
  
2  1   TABLE Access (FULL) OF 'T'

 

 

--执行计划二:

  

SQL> select count(*) from t; 


COUNT(*)
  
----------
24815
  
Execution Plan
  
0   SELECT STATEMENT Optimizer=CHOOSE (Cost=26 Card=1)
  
1  0  SORT (AGGREGATE)
  
2  1   INDEX (FULL SCAN) OF 'T_INDEX' (NON-UNIQUE) (Cost=26 Card=28180)

 

 

这两个执行计划的不同之处:
第一个表示求和是通过进行全表扫描来做的,把整个表中数据读入内存来逐条累加;

第二个表示根据表中索引,把整个索引读进内存来逐条累加,而不用去读表中的数据。


这两种方式到底哪种快:
通常来说可能二比一快,但也不是绝对的。
这是一个很简单的例子演示执行计划的差异。
对于复杂的SQL(表连接、嵌套子查询等),执行计划可能几十种甚至上百种,
但是到底那种最好呢?我们事前并不知道,数据库本身也不知道,
但是数据库会根据一定的规则或者统计信息(statistics)去选择一个执行计划,
通常来说选择的是比较优的,但也有选择失误的时候

二、pl/sql developer开发工具的F5
通过F5查看到的执行计划,其实是pl/sql developer工具内部执行查询表然后格式化的结果。
select * from table where statement_id='1'。其中
Description    描述当前的数据库操作,
Object owner   表示对象所属用户,
Object name    表示操作的对象,
Cost           表示当前操作的代价(消耗),这个列基本上就是评价SQL语句的优劣,
Cardinality    表示操作影响的行数,
Bytes          列表示字节数
Description列的操作是按缩进从内往外执行的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值