目录

一、简介

二、全表扫描(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. 腾讯优图10篇AAAI论文解析,涉及数学速算批改、视频识别和语义分割 | 附下载...
  2. 2018年计算机职称考试冲刺,2018年中级会计职称考试考前30天冲刺计划和学习方法...
  3. Teamviewer 远程ssh命令行更改密码启动
  4. Axure7.0 以及 中文汉化语言包下载 axure汉化包
  5. linux shell命令行及脚本编程实例详解_Linux高手必看的10本经典书籍
  6. 40岁学python有前途吗-西安新城区学python人工智能少儿编程哪家机构好
  7. ldd,locate,vimdiff
  8. linux 引导程序修复工具,技术|Linux下修改引导器的工具:Boot-Repair
  9. nssl1487-图
  10. MFC - PreTranslateMessage()响应自定义消息
  11. linux 可道云_腾讯云linux+kodexplorer可道云搭建私有云盘
  12. NetBean安装已下载的插件
  13. matlab取点坐标之前先将图片放大缩小
  14. DAO:去中心化的新兴领导者
  15. 权限管理系统数据库设计的简单构思
  16. 鸟哥的Linux私房菜PDF
  17. Java如何遍历获取对象中的所有属性和值
  18. 魔兽3无法启动此程序因为计算机中丢失,魔兽争霸3没法启动 总提示directx没法初始化...
  19. 我的QQ游戏之对对碰帮你连代码已经公开了
  20. 幼儿园带括号算式口诀_幼儿园大班数学《括号题型》PPT课件

热门文章

  1. 小程序marker 气泡怎么用_小程序直播怎么用,看这里!
  2. 翻译: 4.1 多层感知器MLP Multilayer Perceptrons pytorch
  3. SwiftUI 生命周期onAppear,onDisappear
  4. 易筋SpringBoot 2.1 | 第十一篇:SpringBoot使用actuator
  5. html5的file api,HTML5 File API
  6. 2021-08-24XLNET 语言模型
  7. 596. 超过5名学生的课
  8. 113. 路径总和 II
  9. Android studio 报错 Unknown host 'jcenter.bintray.com'
  10. 解决办法!!!!UnsupportedClassVersionError Unsupported major.minor version 52.0