您的位置:首页 > 数据库

使用绑定变量提升 PL/SQL 程序性能

2014-12-25 21:39 399 查看
考虑下面两段程序

declare
type rc is ref cursor;
l_rc rc;
l_dummy all_objects.object_name%type;
l_start number default dbms_utility.get_time;
begin
for i in 1..1000
loop
open l_rc for
'select object_name
from all_objects
where object_id ='||i;
fetch l_rc into l_dummy;
close l_rc;
end loop;
dbms_output.put_line
(round((dbms_utility.get_time-l_start)/100, 2)||
'seconds...');
end;
/


declare
type rc is ref cursor;
l_rc rc;
l_dummy all_objects.object_name%type;
l_start number default dbms_utility.get_time;
begin
for i in 1..1000
loop
open l_rc for
'select object_name
from all_objects
where object_id = :x'
using i;
fetch l_rc into l_dummy;
close l_rc;
end loop;
dbms_output.put_line
(round((dbms_utility.get_time-l_start)/100, 2)||
'seconds...');
end;
/


第一段程序使用硬编码, 查询使用的where 条件直接使用 i 的值. 第二段程序使用绑定变量, 并在运行是传入 i 的值.

两段程序的差别在于, 第一段对于每次查询都需要重新解析查询语句, 总共解析了1000 次; 但是第二段只解析了一次, 以后每次查询都从共享池中调用相同的代码.

所以第一段程序总共用了 3分多钟. 第二段程序用了不到 2秒钟.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: