<b>Oracle查询rownum与rowid的差别之处</b>[Oracle防范]
本文“<b>Oracle查询rownum与rowid的差别之处</b>[Oracle防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
以下的文章主如果介绍Oracle查询rownum与rowid的差别之处,以及以假定的方法即,查询条件为rownum = 2,在查询出第一条记录的时的具体内容的介绍,以下就是文章的具体内容的介绍.
在查询中,我们可以注意到,近似于
- select xx from table where rownum < n”(n>1)
这样的查询是有精确含义的,而
- select xx from table where rownum = n”
这样的查询只在n=1的时刻成立,
- select xx from table where rownum > n”(n>1)
这样的查询只能得到一个空集.
别的
- select xx from table where rownum > 0”
这个查询会返回全部的记录.这是为什么呢?缘由就在于Oracle对rownum的处理上,rownum是在得到后果集的时刻产生的,用于标志后果集合后果次序的一个字段,这个字段被称为“伪数列”,也就是事实上不存在的一个数列.
它的特点是按次序标志,并且是逐次递加的,换句话说就是只有有rownum=1的记录,才大概有rownum=2的记录.
让我们回头来解析一下在where中利用rownum作为Oracle查询条件的情形.在rownum取=1,大概rownum <= n (n>1)的时刻,没有问题.那么为什么当条件为rownum = n大概rownum >= n时明显有数据却只能得到一个空集呢?假定我们的查询条件为rownum = 2,那么在查询出的第一条记录的时刻,Oracle标志此条记录rownum为1,后果发现和rownum=2的条件不符,于是后果集为空.
写到这里,我忽然有一个风趣的设法:假定有一条查询语句为select xx,yy from table where zz > 20 and rownum < 10,那么在履行的时刻,是先按照zz>20的条件查询出一个后果集,然后按照rownum取出前10条返回?还是在按照zz>20的条件先查询,然后有一个记录就标志一个rownum,到rownum<10的时刻就终止查询?我认为应当是后者,也就是在履行语句的时刻,不是做full scan,而是取够数据就终止查询.
要考证这个设法应当很简单,找一个数据量非常大的表举行Oracle查询便可以了.惋惜目前我没有这样的表.
我们可以看出,直接利用rownum是要遭到限制的.但是很简单碰到这样的需求“查出符合条件的第xx条到第xx条记录”,比方页面的分页处理.这个时刻若何构造出合适自己的后果集?嗯,墙边那位说全取出来手工挑选的哥们可以拉出去了.
当然这样做也是可以的,但是前提是整个数据集的数据条数不多的情形下.假定碰到上十万百条的数据,全部取出来的话,用户就不用干别的事情了.这个时刻用户应当怎么做呢?当然就是要用到我们介绍的rownum拉!rownum不是个“伪数列”么,好说,我们目前把它弄成一个实在的字段便可以了.
具体做法就是操纵子Oracle查询,在构建暂时表的时刻,把rownum也一同构造进去.比方
- select xx,yy from
(select xx,yy,rownum as xyz from table where zz >20)
where xyz between 10 and 20”
这样便可以了.
别的利用Oracle供应的后果集处理函数minus也可以做到,比方
- select xx,yy from table where zz > 20 and rownum
<20 minus select xx,yy from table where zz>20 and rownum <10”
但是利用minus仿佛比利用子查询越发损耗资源.
和rownum类似,Oracle还供应了别的一个伪数列:rowid.不过rowid和rownum差别,普通说来每一行数据对应的rowid是固定并且唯一的,在这一行数据存入数据库的时刻就肯定了.可以操纵rowid来查询记录,并且通过rowidOracle查询记录是查询速度最快的查询办法.
(这个我没有试过,别的要记着一个长度在18位,并且没有太明显规律的字符串是一个很艰难的事情,所以我个人认为操纵rowid查询记录的实用性不是很大)rowid只有在表发生移动(比方表空间改变,数据导入/导出今后),才会发生改变.
以上是“<b>Oracle查询rownum与rowid的差别之处</b>[Oracle防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |