基础知识之绑定变量窥视----BIND PEEKING

SQL> set wrap off
SQL> select count(*) from test where object_id<10;

执行计划
----------------------------------------------------------
Plan hash value: 2029616900

--------------------------------------------------------------------------------

| Id  | Operation         | Name          | Rows  | Bytes | Cost (%CPU)| Time
--------------------------------------------------------------------------------

|   0 | SELECT STATEMENT  |               |     1 |     5 |     2   (0)| 00:00:0

|   1 |  SORT AGGREGATE   |               |     1 |     5 |            |
|*  2 |   INDEX RANGE SCAN| IDX_OBJECT_ID |    21 |   105 |     2   (0)| 00:00:0

--------------------------------------------------------------------------------


Predicate Information (identified by operation id):
---------------------------------------------------

   2 - access("OBJECT_ID"<10)

SQL> select count(*) from test where object_id<100000;

执行计划
----------------------------------------------------------
Plan hash value: 1131838604

--------------------------------------------------------------------------------

| Id  | Operation             | Name          | Rows  | Bytes | Cost (%CPU)| Tim

--------------------------------------------------------------------------------

|   0 | SELECT STATEMENT      |               |     1 |     5 |   136   (3)| 00:

|   1 |  SORT AGGREGATE       |               |     1 |     5 |            |
|*  2 |   INDEX FAST FULL SCAN| IDX_OBJECT_ID |   218K|  1068K|   136   (3)| 00:

--------------------------------------------------------------------------------


Predicate Information (identified by operation id):
---------------------------------------------------

   2 - filter("OBJECT_ID"<100000)

非绑定变量执行有不同的执行计划

SQL> exec :x:=10;

PL/SQL 过程已成功完成。

SQL> select count(*) from test where object_id<:x;

执行计划
----------------------------------------------------------
Plan hash value: 2029616900

--------------------------------------------------------------------------------

| Id  | Operation         | Name          | Rows  | Bytes | Cost (%CPU)| Time
--------------------------------------------------------------------------------

|   0 | SELECT STATEMENT  |               |     1 |     5 |     6   (0)| 00:00:0

|   1 |  SORT AGGREGATE   |               |     1 |     5 |            |
|*  2 |   INDEX RANGE SCAN| IDX_OBJECT_ID | 10937 | 54685 |     6   (0)| 00:00:0

--------------------------------------------------------------------------------


Predicate Information (identified by operation id):
---------------------------------------------------

   2 - access("OBJECT_ID"<TO_NUMBER(:X))

SQL> exec :x:=100000;

PL/SQL 过程已成功完成。

SQL> select count(*) from test where object_id<:x;

执行计划
----------------------------------------------------------
Plan hash value: 2029616900

--------------------------------------------------------------------------------

| Id  | Operation         | Name          | Rows  | Bytes | Cost (%CPU)| Time
--------------------------------------------------------------------------------

|   0 | SELECT STATEMENT  |               |     1 |     5 |     6   (0)| 00:00:0

|   1 |  SORT AGGREGATE   |               |     1 |     5 |            |
|*  2 |   INDEX RANGE SCAN| IDX_OBJECT_ID | 10937 | 54685 |     6   (0)| 00:00:0

--------------------------------------------------------------------------------


Predicate Information (identified by operation id):
---------------------------------------------------

   2 - access("OBJECT_ID"<TO_NUMBER(:X))

--第一次执行使用绑定变量后由于bind peeking 选择了同样的执行计划

SQL> alter session set sql_trace=true;

会话已更改。

SQL> set autotrace off
--具体信息(11g)通过如下目录查看trace文件
SQL> select value from v$diag_info where name='Default Trace File';

VALUE
--------------------------------------------------------------------------------

d:\app\gyh\diag\rdbms\orcl\orcl\trace\orcl_ora_9692.trc

SQL>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值