目录

一、简介

二、全表扫描(TABLE ACCESS FULL)

三、通过ROWID访问表(TABLE ACCESS BY ROWID)

四、索引扫描(TABLE ACCESS BY INDEX SCAN)

五、参考资料


一、简介

Oracle访问表中记录主要有下面三种方式:

  1. 全表扫描(TABLE ACCESS FULL);
  2. 通过ROWID访问表(TABLE ACCESS BY ROWID);
  3. 索引扫描(TABLE ACCESS BY INDEX SCAN);

下面结合示例分别对三种访问方式进行详解。

二、全表扫描(TABLE ACCESS FULL)

概念:Oracle顺序访问数据表中的每一条记录,并检查每条记录是否满足where指定的过滤条件。在表很大的情况下,不太建议使用全表扫描,效率很低,除非查询出来的记录数比较多(超过总量的5% -- 10%),才考虑使用全表扫描,否则全表扫描就是我们进行优化的一个关键点。

实现机制:ORACLE采用一次读入多个数据块(database block)的方式优化全表扫描,而不是只读取一个数据块,这极大的减少了I/O总次数,提高了系统的吞吐量,所以利用多块读的方法可以十分高效地实现全表扫描。

示例:

explain plan for select * from zhxg_xsxx_xsjbxx t where instr(t.XM,'张') > 0;select * from table(dbms_xplan.display);

执行计划:

通过执行计划,可以看到上面访问zhxg_xsxx_xsjbxx的方式就是全表扫描TABLE ACCESS FULL,针对每条记录比较姓名中是否包含“张”。在日常工作中,我们要尽量减少全表扫描,在进行SQL优化的时候,全表扫描就是一个优化点,考虑是否能够增加一些索引来优化查询。

三、通过ROWID访问表(TABLE ACCESS BY ROWID)

概念:ROWID是由Oracle自动加在表中每行最后的一列伪列,既然是伪列,就说明表中并不会物理存储ROWID的值;我们可以像使用其它列一样使用它,只是不能对该列的值进行增、删、改操作;一旦一行数据插入后,则其对应的ROWID在该行的生命周期内是唯一的,即使发生行迁移,该行的ROWID值也不变。每一个表都有一个ROWID列,一个ROWID值用于唯一确定数据库表中的的一条记录。ROWID表示了该行所在的数据文件、数据块以及行在该块中的位置,通过ROWID我们可以快速定位到目标数据上,通过ROWID访问是Oracle存取单行数据的最快方法。

通过ROWID访问表的这种方式又分为单个ROWID和多个ROWID两种情况:

单个ROWID示例:

--先查询出rowid
--select t.rowid,t.* from zhxg_xsxx_xsjbxx t;explain plan for select t.rowid,t.* from zhxg_xsxx_xsjbxx t where t.rowid = 'AABUJXAACAAALCEAAA';
select * from table(dbms_xplan.display);

执行计划:

多个ROWID示例:

--先查询出多个rowid
--select t.rowid,t.* from zhxg_xsxx_xsjbxx t;explain plan for select t.rowid,t.* from zhxg_xsxx_xsjbxx t where t.rowid in ('AABUJXAACAAALCEAAA', 'AABUJXAACAAALCEAAB','AABUJXAACAAALCEAAC');
select * from table(dbms_xplan.display);

执行计划:

可以看到,上面的执行计划中出现了INLIST ITERATOR,即INLIST迭代,该操作说明其子操作多次重复时,会出现该操作。迭代操作意味着条件中的对象列表一个接一个的迭代传递给子操作。

四、索引扫描(TABLE ACCESS BY INDEX SCAN)

概念:通过索引查找到数据对应的rowid值(对于非唯一索引可能返回多个rowid值),然后根据rowid直接从表中得到具体的数据,这种查找方式称为索引扫描或索引查找(index lookup)。

实现机制:

索引扫描可以由2步组成:

  • (1) 扫描索引得到对应的rowid值;
  • (2) 通过找到的rowid从表中读出具体的数据;

Oracle中提供了五种索引扫描的方式:

  1. 索引唯一扫描(index unique scan);
  2. 索引范围扫描(index range scan);
  3. 索引全扫描(index full scan);
  4. 索引快速扫描(index fast full scan);
  5. 索引跳跃扫描(index skip scan);

关于索引扫描的详细介绍,之前有一篇文章已经详解介绍过了,可以参考这篇文章学习:https://blog.csdn.net/Weixiaohuai/article/details/106577668

五、参考资料

更多关于Oracle数据表访问方式的文章,可以参考下面:

https://www.cnblogs.com/liuqiongliu/archive/2011/03/31/2000876.html

https://blog.csdn.net/leshami/article/details/7474308

https://www.cnblogs.com/xwdreamer/archive/2012/06/13/2547825.html

关于Oracle表访问方式的总结相关推荐

  1. oracle表访问方式

    0.参考文献: Index Full Scan && Index Range Scan oracle-index unique scan 与index range scan等的区别 i ...

  2. oracle 内部表连接方式,oracle表连接方式

    ORACLE表连接方式及常见用法(二) /2010-12-22 13:30:13 /个人分类: 一 引言 数据仓库是目前已知的比较成熟和被广泛采用的解决方案,用于整合电信运营内部所有分散的原始业务数据 ...

  3. oracle 内部表连接方式,ORACLE 表连接方式

    一表的连接 表的连接是指在一个SQL语句中通过表与表之间的关联,从一个或多个表检索出相关的数据.连接是通过SQL语句中FROM从句的多个表名,以及WHERE从句里定义的表之间的连接条件来实现的.如果一 ...

  4. oracle连表图解,oracle 表连接方式解析

    一.表的连接 表的连接是指在一个SQL语句中通过表与表之间的关联,从一个或多个表检索出相关的数据.连接是通过SQL语句中FROM从句的多个表名,以及WHERE从句里定义的表之间的连接条件来实现的.如果 ...

  5. 表访问方式----全表扫描(Full Table Scans, FTS)

    全表扫描(Full Table Scans, FTS) 全表扫描是指Oracle在访问目标表里的数据时,会从该表所占用的第一个区(EXTENT)的第一个块(BLOCK)开始扫描,一直扫描到该表的高水位 ...

  6. Oracle 表连接方式(内连接/外连接/自连接) 详解

    Oracle 表之间的连接分为三种: 1. 内连接(自然连接) 2. 外连接 (1)左外连接 (左边的表不加限制)        (2)右外连接(右边的表不加限制)         (3)全外连接(左 ...

  7. oracle 表访问,向oracle导入访问表

    我在将表导入到oracle时遇到问题.当我导入一个字段是例如导入: 在访问我已经'20,200' 和进口到Oracle''中访问和导入oracle作为'12535'向oracle导入访问表 在访问20 ...

  8. oracle 的“+”和“,”连接表的方式

    2019独角兽企业重金招聘Python工程师标准>>> 一.前提知识 oracle 表连接方式有 内连接 [INNER] JOIN 左外连接 LEFT [OUTER] JOIN 右外 ...

  9. 【DB笔试面试593】在Oracle中,表的访问方式有哪几种?

    ♣题目 部分 在Oracle中,表的访问方式有哪几种? ♣答案部分 访问表的方式也叫优化器访问路径,主要有3种访问路径:全表扫描(FULL TABLE SCAN,FTS).索引扫描(INDEX SCA ...

  10. Oracle优化之表连接方式

    Oracle优化之表连接方式 在Oracle数据库中,两个表之间的表连接方法有排序合并连接.嵌套循环连接.哈希连接和笛卡尔连接四种 1.排序合并连接(sort merge join) 排序合并连接是一 ...

最新文章

  1. Softmax的理解与应用
  2. Go语言介绍 安装 基础命令(一)
  3. Swing中事件的三种处理方法
  4. 成功解决PermissionError: [Errno 13] Permission denied: './data\\mnist\\train-images-idx3-ubyte'
  5. boost::gregorian模块实现查找给定月份最后一天的测试程序
  6. 世界级版本控制工具Vault v10.0发布,多项功能改进|附下载
  7. 瞻博网络:创新是绝对优势
  8. VUE之命令行报错:Component template should contain exactly one root element. If you are using v-if on multi
  9. hmcl手机版_hmcl启动器正版
  10. android逆向工程反编译指南(详细教程)
  11. 推荐6本React在线电子版书籍
  12. windows 10和windows server 2016系统AD的administrator密码修改
  13. 空间直线与平面的交点
  14. java查找pdf关键字_java实现查找PDF关键字所在页码及其坐标
  15. ppt学习05——配色
  16. 一种永不止步的进取精神的勤奋
  17. 电脑视频转换成mp4格式,视频格式转换器转换
  18. php特性之intval学习小记
  19. [ 数据结构 ] 平衡二叉树(AVL)--------左旋、右旋、双旋
  20. java 工资管理系统_Java工资管理系统

热门文章

  1. 数据清洗+特征构造:application_{train|test}.csv
  2. 翻译: Swift 中的委托保留周期 如何在“纯”Swift(没有@objc)中进行弱协议引用
  3. 区块链环境搭建、环境架构介绍、环境如何用、部署 Chaincode、智能合约的调用
  4. 创建CocoaPods的Framework Swift组件化之路(上)
  5. 计算机网络使用的通信线路分为两类,计算机网络技术阶段测试题
  6. linux访问vdma的数据,Xilinx VDMA 24位流输出与32位AXI总线的内存流数据关系
  7. 2021-09-02AUC
  8. 不使用任何判断比较两个整数
  9. -------------分割线-------
  10. Aho-Corasick暂存第二篇