oracle查询一张表数据,Oracle数据库中是如何检索某个表数据

Oracle数据块检索某张表的数据有多种方法,不过总结起来不外乎两种,一种是通过全表扫描,检索出这张表的所有数据块,然后从中找出所需要的数据;另外一种是通过索引,首先找到符合检索条件的索引记录,找出对应表记录的rowid,然后通过rowid查找相关的数据记录。通过索引扫描数据是检索表数据的一个特例,通过rowid中的file id和block id可以直接定位一个数据块,找到数据块后,根据rowid中的行号可以找到对应的数据块中的偏移量,然后找出这条记录。实际上根据索引查找数据的算法也包含在全表扫描中。今天我们以全表扫描为例来看看Oracle是如何检索表数据的。第一步,通过数据字典tab$,我们可以找到表的定义,包括字段定义以及数据段的定义。段的信息存放于seg$中,不过在tab$中已经包含了从数据文件中找到该数据段的所有信息了。

4a2542de8cc731e61b2d3321229a8711.pngtab$中的file#,block#就指出了该表的第一个extent的头部位置,通过这个数据我们就可以找到这张表的表头,根据表头的bitmap信息,就可以找到包含这张表的数据的数据块的extent信息,也就可以去扫描这张表了。要扫描这张表,就需要不这张表的数据块先读入DB CACHE,然后再从DB CACHE中访问这些数据。因为exent是连续的数据块,因此读取这些extent的时候,采用的是多块读操作,当读操作正在进行的时候,会产生db file scattered read等待事件。如果某个exten

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值