Oracle
执行计划
1
,什么是执行计划
所谓执行计划,顾名思义,就是对一个查询任务,做出一份怎样去完成任务的
详细方案。举个生活中的例子,我从珠海要去英国,我可以
选择先去香港然后转机,也可以先去北京转机,或者去广州也可以。但是到?/p>
怎样去英国划算,也就是我的费用最少,这是一件值得考究
的事情。同样对于查询而言,我们提交的
SQL
仅仅是描述出了我们的目的地是
英国,但至于怎么去,通常我们?/p>
SQL
中是没有给出提示信息
的,是由数据库来决定的?/p>
我们先简单的看一个执行计划的对比?/p>
SQL> set autotrace traceonly
执行计划一?/p>
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 C
ard=28180)
这两个执行计划中,第一个表示求和是通过进行全表扫描来做的,把整?/p>
表中数据读入内存来逐条累加
;
第二个表示根据表中索引,?/p>
整个索引读进内存来逐条累加,而不用去读表中的数据。但是这两种方式到底
哪种快呢
?
通常来说可能二比一快,但也不是绝对的。这是一