rownumber分页_oracle中rowid和rownum有什么不同

rownumber分页_oracle中rowid和rownum有什么不同概述这段时间在研究优化方面的内容,刚好看到分页这块,所以顺便整理了下rowid和rownum的区别。

概述

这段时间在研究优化方面的内容,刚好看到分页这块,所以顺便整理了下rowid和rownum的区别。


1、rownum

rownum是伪列,是在获取查询结果集后再加上去的 (获取一条记录加一个rownum)。对符合条件的结果添加一个从1开始的序列号。

实例:

--查询结果有9条
select rownum,e.* from emp e where rownum<10

rownum是动态的,必有查询结果,然后再给查询的结果集添加上这个列。 例如:第一条记录的rownum是1 ,第二条是2,以此类推。

rownumber分页_oracle中rowid和rownum有什么不同

---查询结果为空集
select rownum,e.* from emp e where rownum>5 

当产生结果集时,oracle会产生一条rownum为1的记录,显然不符合条件;那么就会产生第二条记录,同样rownum=1,也不符合记录; 一直下去,导致最后上述sql产生的结果集时空集。

如果需要查询到结果,需要使用子查询:

--查询第5行到第10行的数据(错误写法)
select rownum, empno from (select rownum rn , empno from emp) a where a.rownum > 5 and a.rownum < 10;
--查询第5行到第10行的数据(正确写法)
select rownum, empno from (select rownum rn , empno from emp where rownum<10) a where a.rn>5;
rownumber分页_oracle中rowid和rownum有什么不同

rowid

rowid是物理存在的,实际存在的一个列,是一种数据类型。 基于64为编码的18个字符来唯一标识的一条记录的物理位置的一个ID。

唯一标识出对应的存储的物理位置, 类似hashcode值。

注意:rowid并未存储在表中,所以不支持增删改操作,只能用户查询。

网上的写法(错误):

select empno from emp where rowid > 5 and rowid < 10;

这里查询第5行到第10行的数据网上很多写法是直接rowid去做判断,实际上有问题的(rowid又不是数字,数据类型不一样)

rownumber分页_oracle中rowid和rownum有什么不同


分页IO对比

oracle数据库一般采用rownum来进行分页,常用分页语法有如下两种:

1、直接通过rownum分页:

select*from(
 select a.*,rownum rn from
 (select*from product a where company_id=? orderby status) a
 whererownum<=20)
where rn>10;

数据访问开销=索引IO+索引全部记录结果对应的表数据IO

2、采用rowid分页语法

优化原理是通过纯索引找出分页记录的ROWID,再通过ROWID回表返回数据,要求内层查询和排序字段全在索引里。

create index myindex on product(company_id,status);
select b.*
 from (select *
 from (select a.*, rownum rn
 from (selectrowid rid, status from product a where
 company_id = ? orderby status) a whererownum <= 20)
 where rn > 10) a,
 product b wherea.rid = b.rowid;

数据访问开销=索引IO+索引分页结果对应的表数据IO

3、实例:

一个公司产品有1000条记录,要分页取其中20个产品,假设访问公司索引需要50个IO,2条记录需要1个表数据IO。

那么按第一种ROWNUM分页写法,需要550(50+1000/2)个IO,按第二种ROWID分页写法,只需要60个IO(50+20/2);


关于rowid和rownum方面的内容就介绍到这了,大家也可以自己测试下。

后面会分享更多关于devops和DBA方面内容,感兴趣的朋友可以关注下!!

rownumber分页_oracle中rowid和rownum有什么不同

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/11968.html

(0)

相关推荐

  • Python工程师必知必会——Numpyany基础知识

    Python工程师必知必会——Numpyany基础知识Python是一种功能丰富而又简单易用的编程语言,已经成为数据科学和机器学习领域的主要语言。在数据科学领域中,NumPy是Python中最重要的工具之一。NumPy是一个Python包,提供了高性能数值运算功能和支持大型多维数组和矩阵的数据结构。它支持很多数学操作,例如线性代数、傅里叶变换、随机数生成等等。

    2024-04-29
    108
  • Python工程师:安装sympy库

    Python工程师:安装sympy库Sympy库是Python的符号计算库,支持各种计算操作,包括求导、积分、方程求解、矩阵运算等。如果你经常需要做复杂的数学运算,那么sympy库是一个非常好用的工具,可以大大提高你的工作效率。

    2024-09-04
    22
  • Kubernetes学习笔记之Calico CNI Plugin源码解析(一)

    Kubernetes学习笔记之Calico CNI Plugin源码解析(一)之前在 Kubernetes学习笔记之kube-proxy service实现原理 学习到calico会在worker节点上为pod创建路由route和虚拟网卡virtual interface,并为pod分配pod ip,以及为worker节点分配pod cidr网段。 我们…

    2023-08-17
    131
  • 环球易购数据平台如何做到既提速又省钱?[亲测有效]

    环球易购数据平台如何做到既提速又省钱?[亲测有效]背景简介 环球易购创建于 2007 年,致力于打造惠通全球的 B2C 跨境电商新零售生态,2014 年通过与百圆裤业并购完成上市,上市公司「跨境通(SZ002640)」是 A 股上市跨境电商第一股。经

    2023-04-27
    141
  • python中如何输出分数(输入学生分数,输出成绩等级python)

    python中如何输出分数(输入学生分数,输出成绩等级python)length = 5

    2023-12-03
    130
  • 自平衡二叉查找树_二叉树后序遍历怎么看

    自平衡二叉查找树_二叉树后序遍历怎么看这是我参与8月更文挑战的第20天,活动详情查看:8月更文挑战 【LeetCode 110.平衡二叉树】两种递归实现:自顶向下、自底向上 题目描述 给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中

    2023-07-18
    121
  • ORACLE 查看RMAN的备份信息总结「建议收藏」

    ORACLE 查看RMAN的备份信息总结「建议收藏」 某个时间段备份失败的记录 SELECT * FROM V$RMAN_STATUS WHERE START_TIME >= TO_DATE(&START_TIME,’YYYY-MM-DD HH…

    2023-03-01
    156
  • 观察者模式详解_观察者模式属于什么模式

    观察者模式详解_观察者模式属于什么模式本篇文章总结一下观察者模式,主要从以上几点介绍。 观察模式是我们在开发过程中经常遇到的一种设计模式,这里先来介绍一下概念。 从字面意思上去理解,所谓的观察者模式,首先有观察者(一个或者多个),被观察者(一个)。当被观察者状态发生变化的时候,就会去通知它的所有的观察者,然后由观察…

    2023-07-19
    141

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注