还算深度解析ORACLE ROWNUM

本文探讨了Oracle的ROWNUM属性,包括其本质是计数器、查询优化中的COUNT STOPKEY概念,以及如何利用ROWNUM进行分页SQL优化。通过实例解析ROWNUM的工作原理,解释了为何使用ROWNUM过滤时必须从1开始,并分析了使用随机数作为ROWNUM条件时返回结果不固定的原因。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

关于Oracle的rownum大家并不陌生,很多人说是一个查询出结果后的伪列,是从1开始的,使用rownum过滤时必须从1开始等。rownum是怎样一个伪列,我们一会讨论;rownum是从1开始的,但是既然是伪列,为什么必须从1开始,下面我们一点点剖析。

本此博客主要讨论以下几个问题

①,rownum是什么及简要算法;

②,因为rownum,执行计划中COUNT STOPKEY是怎么回事;

③,利用rownum的COUNT STOPKEY进行分页SQL优化。

0,数据准备

drop table test1 ;

create table test1 as select * from dba_objects;

alter table TEST1 add constraint PK_TEST1 primary key (OBJECT_ID);

drop table test2;

create table test2 as select * from test1 where rownum<100; --只插入99条数据

1,一位美女的问题引出rownum是什么

前几天,有位美女提出了类似这样一个问题:

select * from test2 t where rownum=trunc(dbms_random.value(0,100));

这个语句实际返回结果是0-n条不等,按照很多人的解释,rownum过滤时必须从1开始,用随机数做条件,返回结果只能时0条或者1条,大于1条是怎么回事?

当我们不知道原因时,首先看看执行计划,看看数据库是怎么执行这句SQL的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值