前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【DB笔试面试386】在Oracle中,ROWID和ROWNUM的区别是什么?

【DB笔试面试386】在Oracle中,ROWID和ROWNUM的区别是什么?

作者头像
AiDBA宝典
发布2022-02-22 15:05:15
5510
发布2022-02-22 15:05:15
举报
文章被收录于专栏:小麦苗的DB宝专栏

Q

题目

在Oracle中,ROWID和ROWNUM的区别是什么?

A

答案

Oracle有两个著名的伪列ROWID和ROWNUM,下面分别来介绍它们。

(一)ROWID

ROWID是一个伪列,既然是伪列,那么这个列就不是用户定义,而是系统自己给加上的。对每个表都有一个ROWID的伪列,但是表中并不物理存储ROWID列的值。不过可以像使用其它列那样使用它,但是不能删除该列,也不能对该列的值进行修改、插入。

ROWID对访问一个表中的给定的行提供了最快的访问方法,通过ROWID可以直接定位到相应的数据块上,然后将其读到内存。当创建一个索引时,该索引不但存储索引列的值,而且也存储索引值所对应的行的ROWID,这样通过索引就可以快速找到相应行的ROWID,通过该ROWID,就可以迅速将数据查询出来。这也就是在使用索引查询时,速度比较快的原因。

一般来说,当表中的行确定后,ROWID就不会发生变化,一旦一行数据插入数据库,ROWID在该行的生命周期内是唯一的,即使该行产生行迁移,行的ROWID也不会改变,UPDATE不会改变ROWID,INSERT更不会。从ROWID定义可知,只有当数据行的物理位置改变时才会导致ROWID改变,所以,只需要关心那些会导致数据物理位置变化的操作即可。

ROWID可以分为以下几种类型:

l 物理ROWID:存储堆组织表、表簇、表分区、和索引分区中的行地址。

l 逻辑ROWID:存储索引组织表中的行地址。

l 外部ROWID:是外来表(如通过网关访问的DB2表)中的标识符。它们不是标准的Oracle数据库ROWID。

有一种数据类型称为通用ROWID或UROWID,支持各种ROWID。

当如下情况发生时,ROWID将发生改变,即当数据迁移到其它块的时候,ROWID就会改变:

(1)对一个表做表空间的移动或重建后。

(2)对一个表进行了exp/imp或expdp/impdp后。

(3)MOVE、FLASHBACK TABLE、修改分区键值到另一个分区、分区表的分区数据转移到其它分区、SHRINK TABLE等。

通过DBMS_ROWID可以获取文件号、块号等信息。

(二)ROWNUM

ROWNUM是一个伪列,不是真正的列,在表中并不真实存在,它是Oracle数据库从数据文件或缓冲区中读取数据的顺序。切勿理解成记录的行号(这是很多人一直这样认为的),例如想查询第二行记录按下面的方法是查询不到的:

SELECT * FROM SCOTT.TABLE_LHR WHERE ROWNUM=2;

ROWNUM主要应用于Top-N查询中。

DB笔试面试历史连接

http://mp.weixin.qq.com/s/Vm5PqNcDcITkOr9cQg6T7w

About Me:小麦苗

● 本文作者:小麦苗,只专注于数据库的技术,更注重技术的运用

● 作者博客地址:http://blog.itpub.net/26736162/abstract/1/

● 本系列题目来源于作者的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解

● 版权所有,欢迎分享本文,转载请保留出处

● 题目解答若有不当之处,还望各位朋友批评指正,共同进步

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-03-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DB宝 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档