问题: (MountLion )
直接赋值与select from dual的效率对比
在pl/sql中,可以直接给变量赋值,也可以使用select ... into var from dual,这两种方式效率有差别吗?
开始我认为,select 要慢些,因为需要扫描dual表,虽然表很小,但也有消耗。然而实验结果让我大跌眼镜:
declare a varchar2(30); begin for i in 1..100000 loop select user into a from dual; end loop; end;
declare a varchar2(30); begin for i in 1..100000 loop a:=user; end loop; end;
select from dual 居然比直接赋值快10%左右,经过翻来覆去的实验,结果还是这样。
哪位可以解释一下原因?
我的回答:
user是个sql函数, 所以
a:=user;
实际上相当于
select user into b from dual;
a := b;
如果把user换成一个字符串常量, 那么可以看到第二个查询明显快。