都是向一个表里面插入1000条数据。
create table t(x int);
带参数的存储过程
create or replace procedure proc1
as
begin
for i in 1 .. 1000
loop
execute immediate
'insert into t values(:x)' using i;
end loop;
end;
/
不带参数的存储过程
create or replace procedure proc2
as
begin
for i in 1 .. 1000
loop
execute immediate
'insert into t values('||i||')';
end loop;
end;
运行看看结果:
SQL> exec proc2;
PL/SQL 过程已成功完成。
已用时间: 00: 00: 00.40
SQL> exec proc1;
PL/SQL 过程已成功完成。
已用时间: 00: 00: 00.03
SQL> exec proc2;
PL/SQL 过程已成功完成。
已用时间: 00: 00: 00.23
SQL> exec proc1;
PL/SQL 过程已成功完成。
已用时间: 00: 00: 00.01
SQL>
结论
使用带参数的SQL,性能比不带参数的高10-20倍。也许没有这么悬殊,但差距绝对应该是很明显的。
本文对比了使用带参数与不带参数的存储过程向表中批量插入数据的性能差异。实验结果显示,带参数的SQL执行效率明显更高,性能提升了10-20倍。
588

被折叠的 条评论
为什么被折叠?



