美文网首页程序员数据库
Oracle优化器基础知识之访问数据的方法(一)

Oracle优化器基础知识之访问数据的方法(一)

作者: smileNicky | 来源:发表于2019-03-02 15:38 被阅读7次

    @[toc]

    一、访问数据的方法

    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)


    在这里插入图片描述

    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优化器基础知识之访问数据的方法(一)

        本文链接:https://www.haomeiwen.com/subject/qtaeuqtx.html