阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Oracle优化器基础知识之直接访问数据的方法

107次阅读
没有评论

共计 1402 个字符,预计需要花费 4 分钟才能阅读完成。

一、访问数据的方法

Oracle 访问表中数据的方法有两种,一种是直接表中访问数据,另外一种是先访问索引,如果索引数据不符合目标 SQL,就回表,符合就不回表,直接访问索引就可以。

本文先介绍直接访问数据的方法,下一篇介绍访问索引的方法

1、直接访问数据

Oracle 直接访问表中数据的方法又分为两种:一种是全表扫描;另一种是 ROWID 扫描

1.1 全表扫描

全表扫描是 Oracle 直接访问数据的一种方法,全表扫描时从第一个区 (EXTENT) 的第一个块 (BLOCK) 开始扫描,一直扫描的到表的高水位线(High Water Mark),这个范围内的数据块都会扫描到

全表扫描是采用多数据块一起扫的,并不是一个个数据库扫的,然后我们经常说全表扫描慢是针对数据量很多的情况,数据量少的话,全表扫描并不慢的,不过随着数据量越多,高水位线也就越高,也就是说需要扫描的数据库越多,自然扫描所需要的 IO 越多,时间也越多

注意:数据量越多,全表扫描所需要的时间就越多,然后直接删了表数据呢?查询速度会变快?其实并不会的,因为即使我们删了数据,高位水线并不会改变,也就是同样需要扫描那么多数据块

1.2 ROWID 扫描

ROWID 也就是表数据行所在的物理存储地址,所谓的 ROWID 扫描是通过 ROWID 所在的数据行记录去定位。ROWID 是一个伪列,数据库里并没有这个列,它是数据库查询过程中获取的一个物理地址,用于表示数据对应的行数。
用 sql 查询:

select t.* , rowid from 表格

随意获取一个 ROWID 序列:AAAWSJAAFAAAWwUAAA,前 6 位表示对象编号(Data Object number),其后 3 位文件编号(Relative file number),接着其后 6 位表示块编号(Block number),再其后 3 位表示行编号(Row number)

Oracle 优化器基础知识之直接访问数据的方法

ROWID 编码方法是:A ~ Z 表示 0 到 25;a ~ z 表示 26 到 51;0~9 表示 52 到 61;+ 表示 62;/ 表示 63;刚好 64 个字符。

这里随意找张表查一下文件编号、区编号、行编号,查询后会返回 rowid 的一系列物理地址和文件编号(rowid_relative_fno(rowid))、块编号(rowid_block_number(rowid))、行编号(rowid_row_number(rowid))

select t.seq,
       rowid,
       dbms_rowid.rowid_relative_fno(rowid),
       dbms_rowid.rowid_block_number(rowid),
       dbms_rowid.rowid_row_number(rowid)
  from t_info t

SQL 查询一下表格名称为 TABLE 的对象编码

select owner,object_id,data_object_id,status from dba_objects where object_name='TABLE';

相对文件 id 和绝对文件编码
相对文件 id 是指相对于表空间,在表空间唯一; 绝对文件编码是指相当于全局数据库而言的,全局唯一;下面 SQL 查询一下相对文件 id 和绝对文件编码

select file_name,file_id,relative_fno from dba_data_files;

更多 Oracle 相关信息见Oracle 专题页面 https://www.linuxidc.com/topicnews.aspx?tid=12

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计1402字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中