SQLServer(绑定变量的分析理解)

SQLServer(绑定变量的分析理解),第1张

SQLServer(绑定变量的分析理解),第2张

绑定变量
在查询中,绑定变量是一个占位符。例如,要检索雇员123的记录,可以查询:
select * from Scott . empwhere empno = 123;
此外,还可以查询:
select * from Scott . EMP where empno =:empno;
在一个典型的系统中,雇员123被查询一次,可能再也不会被查询。将来,将查询雇员456,然后是雇员789,依此类推。
如果在一个查询中使用了单词(常量),那么每个查询都是一个新的查询,即以前从未在数据库中找到过的查询。每个查询都必须被分析、限定(名称解析)、
安全检查、优化等。简单来说,每执行一条语句,每次执行都要编译。
第二个查询使用绑定变量:empno,该变量的值在执行查询时提供。查询编译一次后,考试大提示的查询方案存储在共享池(库缓存)中,可供检索重用。
性能差异巨大。
-
如果使用绑定变量,提交引用同一对象的相同查询的人将使用共享池中的编译方案。子程序只需要编译一次,就可以重用。
它不仅使用较少的资源,而且减少了锁存时间和频率。这将提高性能并极大地提高可伸缩性。
-test(根据不同机器不同,这个测试是同一台机器)
-
声明
类型RC是绑定变量的ref cursor
l _ RC RC;
l _ dummy all _ objects . object _ name % type;
l_start number默认sys . DBMS _ utility . get _ time;
开始
I in 1..1000 loop
open l _ RC for
' select a . object _ name from all _ objects a where a . object _ id =:X ' using I;
将l_rc提取到l_dummy中;
关闭l _ rc
结束循环;
DBMS _ output . put _ line(round((sys . DBMS _ utility . get _ time-l _ start)/100,2) || '秒');
end;
-
-
l _ RC RC;
l _ dummy all _ objects . object _ name % type;
l_start number默认sys . DBMS _ utility . get _ time;
开始
I in 1..1000 loop
open l _ RC for
' select a . object _ name from all _ objects a其中a . object _ id = ' | | I;
将l_rc提取到l_dummy中;
关闭l _ rc
结束循环;
DBMS _ output . put _ line(round((sys . DBMS _ utility . get _ time-l _ start)/100,2) || '秒');
end;
-
-为了避免这种情况下的硬解析,您需要使用绑定变量。它是用户放入查询中的占位符,它会告诉Oracle“稍后我会为这个变量提供一个值,现在我需要生成一个方案,但是当我实际执行语句时,我会为您提供应该使用的实际值”。
select * from EMP where ename = ' KING ';//不要使用绑定变量
select * from EMP where name =:bv//使用一般在过程或函数中使用的绑定变量
,可以优化共享池的使用。
示例:
SQL >在
SQL > Drop Table HXZ _ 12上设置服务器输出;
该表已被丢弃。
SQL >创建表hxz_12(c数);
表已经创建。
SQL >-测试提示未绑定变量
SQL > declare
2L _ start number默认DBMS _ utility。get _ time
3 l_tabname varchar2(10)默认为“hxz _ 12”;1中x的
4 begin
5..10000循环
6执行立即' insert into '||l_tabname||'(c)值(' | | x | | ')';
7结束循环;
8 DBMS _ output . put _ line(round((DBMS _ utility . get _ time-l _ start)/100,2) ||
9 ' seconds ... ');
10提交;
11结束;
12/
2.89秒...
PL/SQL进程已成功完成。
SQL > declare
2 l _ start number默认dbms _ utility.get _ time
3 l_tabname varchar2(10)默认为“hxz _ 12”;1中x的
4 begin
5..10000循环
6执行立即' insert into ' | | l _ tabname | | '(c)values(:v)'
7使用x;
8结束循环;
9 DBMS _ output . put _ line(round((DBMS _ utility . get _ time-l _ start)/100,2) ||
10 '秒...');
11提交;
12结束;
13/
. 74秒...
PL/SQL进程已成功完成。
SQL >
exmoda表明变量绑定的效果比没有变量绑定的效果好很多。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » SQLServer(绑定变量的分析理解)

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情