当执行如下语句时,优化器选择全表扫描:
hao@TEST> select count(pad) from t where id < 990;
COUNT(PAD)
----------
989
Execution Plan
----------------------------------------------------------
Plan hash value: 1842905362
---------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
---------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 42 | 3 (0)| 00:00:01 |
| 1 | SORT AGGREGATE | | 1 | 42 | | |
|* 2 | TABLE ACCESS FULL| T | 989 | 41538 | 3 (0)| 00:00:01 |
hao@TEST> var n number
hao@TEST> execute :n := 990;
PL/SQL procedure successfully completed.
hao@TEST> select count(pad) from t where id < :n;
COUNT(PAD)
----------
989
Execution Plan
----------------------------------------------------------
Plan hash value: 2536185945
-------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 42 | 2 (0)| 00:00:01 |
| 1 | SORT AGGREGATE | | 1 | 42 | | |
| 2 | TABLE ACCESS BY INDEX ROWID| T | 50 | 2100 | 2 (0)| 00:00:01 |
|* 3 | INDEX RANGE SCAN | T_ID | 9 | | 2 (0)| 00:00:01 |
一般来说,OLTP环境中适合使用绑定变量,因为系统中的sql大部分是返回结果集较小的或者是插入语句等等,这类语句执行时间一般小于分析时间,时间花费主要在分析上,如果使用绑定变量,可以有效的降低response time。而对于返回结果集较大的sql语句,那么它的分析时间远小于执行时间,在这个时候使用绑定变量不太适合,更有可能导致错误的执行计划而使系统崩溃。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22253646/viewspace-667336/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/22253646/viewspace-667336/