oracle绑定变量 慢,Oracle认证:何时使用绑定变量性能反而差

select * from T_PEEKING a where b = :V

call count cpu elapsed disk query current rows

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

Parse 1 0.00 0.00 0 0 0 0

Execute 1 0.00 0.00 0 0 0 0

Fetch 68 0.01 0.07 0 406 0 1000

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

total 70 0.01 0.08 0 406 0 1000

Misses in library cache during parse: 1

Optimizer mode: CHOOSE

Parsing user id: SYS

Rows Row Source Operation

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

1000 TABLE ACCESS FULL T_PEEKING (cr=406 pr=0 pw=0 time=5052 us)

但是,绑定变量窥视对一条语句只会使用一次。就是说,在第一次解析语句时,将绑定变量值考虑进去计算成本生成查询计划。以后在执行该语句时都采用这个查询计划,而不再考虑以后绑定变量的值是什么了。 SQL> conn sys/sys as sysdba

以下是引用片段:

Connected.

SQL>

SQL>

SQL> set autot trace

SQL>

SQL> alter session set sql_trace = true;

Session altered.

SQL>

SQL> var v char(1)

SQL>

SQL> exec :v := 'B';

PL/SQL procedure successfully completed.

SQL>

SQL> select * from T_PEEKING a where b = :V;

1000 rows selected.

SQL>

SQL> alter session set sql_trace = false;

Session altered.

再用Tkprof分析生成的trace文件,看到尽管这里的值是"B",选择索引扫描会更优,但分析结果中查询计划还是使用全表扫描: select *

以下是引用片段:

from

T_PEEKING a where b = :V

call count cpu elapsed disk query current rows

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

Parse 1 0.00 0.00 0 0 0 0

Execute 1 0.00 0.00 0 0 0 0

Fetch 2 0.00 0.00 0 340 0 2

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

total 4 0.00 0.00 0 340 0 2

Misses in library cache during parse: 0

Optimizer mode: CHOOSE

Parsing user id: SYS

Rows Row Source Operation

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

2 TABLE ACCESS FULL T_PEEKING (cr=340 pr=0 pw=0 time=1005 us)

因此,这种情况下使用绑定变量也会导致无法选择最优的查询计划。

综上所述,我们可以得出一个结论:在对建有索引的字段(包括字段集),且字段(集)的集的势非常大时,使用绑定变量可能会导致查询计划错误,因而会使查询效率非常低。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值