当前位置:数据库 > Oracle >>

oracle绑定变量与非绑定变量比较


案例演示前准备工作:
--alter system flush shared_pool; 
--set timing on;
--从一个“空”的共享池开始,如果多次运营这些测试语句,就需要每次清空共享池,
否则,非绑定变量sql将被缓存,这样看起来运行非常快   www.zzzyk.com  
----案例--使用非绑定变量
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;
/
 

  www.zzzyk.com  
使用非绑定变量的明显比使用绑定变量的耗时长,原因在于:非绑定变量每次查询都是一个新的查询,即在数据库中以前没有过的查询。每次查询必须经过分析、限定(名称解析)、安全检查、优化等等;而使用绑定变量的查询,绑定变量的值在查询执行时提供。查询经过一次编译后,查询方案存储在共享池(库高速缓存)中,可以用来检索和重用,故二者的差异是巨大的。因此我们在实际工作中,应根据实际情况进行选择。
 
Oracle
MySQL
Access
SQLServer
DB2
Excel
SQLite
SYBASE
Postgres
如果你遇到数据库难题:
请访问www.zzzyk.com 试试
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,