Oracle arraysize 有哪些研究?
SYS@proc> desc aaa;
名称 为空?类型
---------------------------------------- --------------- ----------------------------
ID1 p>
ID2 p; NUMBER(38)
ID3 NUMBER(38)
< br />
SYS@proc> 从 aaa 中选择 * ; /p>
---------- ---------- ---------- ----------
1 1 1 1 1
1 1 1 1 0
SYS@proc> select * from aaa1;
ID1 ID2 ID3 ID4
---- ------ ---------- ---- ------ ----------
1 1 1 0
1 1 1 1 1
SYS@proc> 从 aaa 中选择 *,其中 id1/id2= 1 且 id3/id4=1;
错误:
ORA-01476:除数等于零
未选择行
< br/>
SYS@proc> 设置数组大小 1
SYS@proc> /
p>
ID1 ID2 ID3 ID4
------------ ---------- ------ ---- ----------
1 1 1 1 1 1
错误:
ORA-01476: 除数等于零
SYS@proc> select * from aaa1 where id1/id2=1 and id3/id4 =1;
select * from aaa1 where id1/id2=1 and id3/id4 =1 =1
第 1 行错误:
ORA-01476: 除数为等于零
SYS@ proc> drop table aaa2 purge;
p>
表已删除。
SYS@proc> 创建表 aaa2 (id1 int,id2 int,id3 int,id4 int,flag int);
表已创建。
SYS@proc>插入 aaa2 值(1,1,1,1,1);
已创建 1 行。
SYS@proc>插入aaa2值(1,1,1,1,2);
< / p>
已创建 1 行。
SYS@proc> 插入 aaa2 值(1,1,1,1,3 ) ;
已创建 1 行。
SYS @proc> 插入 aaa2 值(1,1,1,1,4);
创建 1 行。
SYS@proc>插入aaa2值(1,1,1,1,5);
< br />
已创建 1 行。
SYS@proc> 插入 aaa2 值(1,1,1 , 1,6);
已创建 1 行。
SYS@proc> 插入 aaa2 值(1,1,1,1,7);
已创建 1 行。
SYS@proc>插入aaa2值(1,1,1,1,8);
已创建 1 行。
SYS@proc> 插入 aaa2 值(1 , 1,1,1,9);
1已创建行。
SYS@proc> 插入 aaa2 值(1,1,1,1,10);
< /p>
已创建 1 行。
SYS@proc> 插入 aaa2 value(1,1,1,0,0);
已创建 1 行。
SYS@proc> commit;
提交完成。
SYS@proc> 分析表 aaa2 计算统计信息;
分析表。< br/>
SYS@proc> set arraysize 1
SYS@proc> select * from aaa2 where id1/ id2=1 和 id3/id4=1;
ID1 ID2 ID3 ID4 FLAG
-- -------- ---------- ---------- ---- ------ ----------
1 1 1 1 1 1 1
1 1 1 1 1 1 1 2
1 1 1 1 1 1 3
1 1 1 1 4
1 1 1 1 5
1 1 1 1 1 1 1 6
1 1 1 1 1 7
1 1 1 1 1 8
1 1 1 1 1 1 9
错误:
ORA-01476:除数等于零
选择了9行。
--从大量结果来看,arraysize为与1或2相同。这里有9个预见。
SYS@proc>从aaa2中选择*;
ID1 ID2 ID3 ID4 标志
------------ ---------- ---------- - --- ------ ----------
1 1 1 1 1 1
1 1 1 1 1 2
1 11 1 3
1 1 1 1 1 4
1 1 1 5
1 1 1 6
1 1 1 1 1 7
1 1 1 1 8
1 1 1 1 1 9
1 1 1 1 1 10
1 1 1 1 0 0
已选择 11 行。
SYS@proc>
SYS@proc> 设置arraysize 2
SYS@proc> select * from aaa2 where id1/id2=1 and id3/id4=1;
< p> />
---------- ---------- ---------- --------- - ----------
1 1 1 1 1 1
1 1 1 1 2
p>
1 1 1 1 1 1 3
1 1 1 1 1 4
1 1 1 1 15
< /p>
1 1 1 1 1 6
1 1 1 1 1 7
1 1 1 1 1 8
错误:
p>
选择了8行。
对应10046的语句,可以看到返回了9行,但是从上面看好像是8行,很奇怪。
在游标中解析 #140496887317072 len=48 dep=0 uid=0 oct=3 LCD=0 tim=1514130832420098 hv=3007681721 ad='812bd000' sqlid='7cfwyuytnb55t'
从 id1/id2=1 和 id3/id4=1 的 aaa2 中选择 *
STMT 结束
解析#140496887317072:c=0,e=1221,p=0,cr=0,cu=0,mis=1,r=0,dep=0,og=1,plh=2576342259,tim=1514130832420093
执行#140496887317072:c=0,e=24,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=1,plh=2576342259 ,tim=1514130832420238
等待 #140496887317072: nam='SQL*Net 消息到客户端' ela= 5 驱动程序 id=1650815232 #bytes=1 p3=0 obj#=-1 tim= 1514130832420238
FETCH #140496887317072:c=0,e=64,p =0,cr=2,cu=0,mis=0,r=1,dep=0,og=1,plh=2576342259,tim=1514130832420331
等待 #140496887317072: nam='SQL*Net 消息到客户端' ela= 3 驱动程序 id=1650815232 #bytes=1 p3=0 obj#=-1 tim=1514130832420907
FETCH #140496887317072: c=0,e=36,p=0,cr=1,cu=0,mis=0, r=2,dep=0,og=1,plh=2576342259,tim=1514130832420924
等待 #140496887317072: nam='SQL*Net 来自客户端的消息' ela= 146 驱动程序 id=1650815232 #bytes=1 p3=0 obj#=-1 tim=1514130832421092
等待 #140496887317072: nam='发送给客户端的 SQL*Net 消息' ela= 2 驱动程序 id=1650815232 #bytes=1 p3=0 obj#=-1 tim=1514130832421137
FETCH #140496887317072:c=0,e=28,p=0 ,cr=1 ,cu=0,mis=0,r=2,dep=0,og=1,plh=2576342259,tim=1514130832421151
等待#140496887317072: nam='来自客户端的 SQL*Net 消息' ela= 66 驱动程序 id=1650815232 #bytes=1 p3=0 obj#=-1 tim=1514130832421237
等待#140496887317072:nam='SQL*Net消息到客户端'ela=2驱动程序id=1650815232#bytes=1 p3=0 obj#=-1 tim=1514130832421277
FETCH #140496887317072:c= 0,e=26,p=0,cr=1,cu=0,mis=0,r=2,dep= 0,og=1,plh=2576342259,tim=1514130832421290
等待 #140496887317072: nam='来自客户端的 SQL*Net 消息' ela= 60 驱动程序 id=1650815232 #bytes=1 p3 =0 obj#=-1 tim=1514130832421369
等待#140496887317072: nam='SQL*Netmessage to client' ela= 1 驱动程序 id=1650815232 #bytes=1 p3=0 obj# =-1 tim=1514130832421407
FETCH #140496887317072:c=0,e=25,p =0,cr=1,cu=0,mis=0,r= 2,dep=0,og=1,plh=2576342259,tim=1514130832421420
WAIT #140496887317072: nam='来自客户端的 SQL*Net 消息' ela= 410 驱动程序id=1650815232 #bytes=1 p3=0 obj#=-1 tim=1514130832421848
WAIT #140496887317072: nam='SQL*Net message to client' ela= 2 驱动程序 id=1650815232 #bytes=1 p3=0 obj#=-1 tim=1514130832421907
FETCH #14049688731第7072章:c=0,e=63,p=0,cr=1,cu=0,mis=0,r=1,dep=0,og=1,plh=2576342259,tim=1514130832421956
< /p >
STAT #140496887317072 id=1 cnt=10 pid=0 pos=1 obj=88977 op='表访问完整 AAA2 (cr=7 pr=0 pw=0 时间=94 us 成本=2 大小= 10 卡 =1)'
WAIT #140496887317072: nam='SQL*Net 中断/重置到客户端' ela= 28 驱动程序 id=1650815232 中断?=1 p3=0 obj#= -1 tim=1514130832422110
等待 #140496887317072: nam='SQL*Net 中断/重置客户端' ela= 120 驱动程序 id=1650815232 中断?=0 p3=0 obj#=-1 tim=1514130832422252
等待 #140496887317072: nam='来自客户端的 SQL*Net 消息' ela= 595 驱动程序 id=1650815232 #bytes=1 p3=0 obj#=-1 tim=1514130832422889
关闭#140496887317072:c=0,e=14,dep=0,type =0,tim=1514130832422981
===== ================
所以实际上arraysize是1还是2,还是有区别的。不过从10046的角度来看并没有太大区别,从全表扫描或者其他可以正常返回结果的情况来看,值1 和 2 完全相同。
但事实上,无论arraysize的值是多少,默认情况下仅第一行就会直接向用户发送反馈,所以应该不需要设置它。
后面学习的逻辑阅读也存在一些问题,到12C差别就更大了。
看完上面的内容,你是否掌握了Oracle arraysize的研究方法呢?如果您想学习更多技能或者想了解更多相关内容,请关注行业资讯频道。感谢您的阅读!
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. 编程技术 > Oracle arraysize 有哪些研究?