关于Oracle表访问方式的总结
目录
一、简介
二、全表扫描(TABLE ACCESS FULL)
三、通过ROWID访问表(TABLE ACCESS BY ROWID)
四、索引扫描(TABLE ACCESS BY INDEX SCAN)
五、参考资料
一、简介
Oracle访问表中记录主要有下面三种方式:
- 全表扫描(TABLE ACCESS FULL);
- 通过ROWID访问表(TABLE ACCESS BY ROWID);
- 索引扫描(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中提供了五种索引扫描的方式:
- 索引唯一扫描(index unique scan);
- 索引范围扫描(index range scan);
- 索引全扫描(index full scan);
- 索引快速扫描(index fast full scan);
- 索引跳跃扫描(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表访问方式的总结相关推荐
- oracle表访问方式
0.参考文献: Index Full Scan && Index Range Scan oracle-index unique scan 与index range scan等的区别 i ...
- oracle 内部表连接方式,oracle表连接方式
ORACLE表连接方式及常见用法(二) /2010-12-22 13:30:13 /个人分类: 一 引言 数据仓库是目前已知的比较成熟和被广泛采用的解决方案,用于整合电信运营内部所有分散的原始业务数据 ...
- oracle 内部表连接方式,ORACLE 表连接方式
一表的连接 表的连接是指在一个SQL语句中通过表与表之间的关联,从一个或多个表检索出相关的数据.连接是通过SQL语句中FROM从句的多个表名,以及WHERE从句里定义的表之间的连接条件来实现的.如果一 ...
- oracle连表图解,oracle 表连接方式解析
一.表的连接 表的连接是指在一个SQL语句中通过表与表之间的关联,从一个或多个表检索出相关的数据.连接是通过SQL语句中FROM从句的多个表名,以及WHERE从句里定义的表之间的连接条件来实现的.如果 ...
- 表访问方式----全表扫描(Full Table Scans, FTS)
全表扫描(Full Table Scans, FTS) 全表扫描是指Oracle在访问目标表里的数据时,会从该表所占用的第一个区(EXTENT)的第一个块(BLOCK)开始扫描,一直扫描到该表的高水位 ...
- Oracle 表连接方式(内连接/外连接/自连接) 详解
Oracle 表之间的连接分为三种: 1. 内连接(自然连接) 2. 外连接 (1)左外连接 (左边的表不加限制) (2)右外连接(右边的表不加限制) (3)全外连接(左 ...
- oracle 表访问,向oracle导入访问表
我在将表导入到oracle时遇到问题.当我导入一个字段是例如导入: 在访问我已经'20,200' 和进口到Oracle''中访问和导入oracle作为'12535'向oracle导入访问表 在访问20 ...
- oracle 的“+”和“,”连接表的方式
2019独角兽企业重金招聘Python工程师标准>>> 一.前提知识 oracle 表连接方式有 内连接 [INNER] JOIN 左外连接 LEFT [OUTER] JOIN 右外 ...
- 【DB笔试面试593】在Oracle中,表的访问方式有哪几种?
♣题目 部分 在Oracle中,表的访问方式有哪几种? ♣答案部分 访问表的方式也叫优化器访问路径,主要有3种访问路径:全表扫描(FULL TABLE SCAN,FTS).索引扫描(INDEX SCA ...
- Oracle优化之表连接方式
Oracle优化之表连接方式 在Oracle数据库中,两个表之间的表连接方法有排序合并连接.嵌套循环连接.哈希连接和笛卡尔连接四种 1.排序合并连接(sort merge join) 排序合并连接是一 ...
最新文章
- 腾讯优图10篇AAAI论文解析,涉及数学速算批改、视频识别和语义分割 | 附下载...
- 2018年计算机职称考试冲刺,2018年中级会计职称考试考前30天冲刺计划和学习方法...
- Teamviewer 远程ssh命令行更改密码启动
- Axure7.0 以及 中文汉化语言包下载 axure汉化包
- linux shell命令行及脚本编程实例详解_Linux高手必看的10本经典书籍
- 40岁学python有前途吗-西安新城区学python人工智能少儿编程哪家机构好
- ldd,locate,vimdiff
- linux 引导程序修复工具,技术|Linux下修改引导器的工具:Boot-Repair
- nssl1487-图
- MFC - PreTranslateMessage()响应自定义消息
- linux 可道云_腾讯云linux+kodexplorer可道云搭建私有云盘
- NetBean安装已下载的插件
- matlab取点坐标之前先将图片放大缩小
- DAO:去中心化的新兴领导者
- 权限管理系统数据库设计的简单构思
- 鸟哥的Linux私房菜PDF
- Java如何遍历获取对象中的所有属性和值
- 魔兽3无法启动此程序因为计算机中丢失,魔兽争霸3没法启动 总提示directx没法初始化...
- 我的QQ游戏之对对碰帮你连代码已经公开了
- 幼儿园带括号算式口诀_幼儿园大班数学《括号题型》PPT课件
热门文章
- 小程序marker 气泡怎么用_小程序直播怎么用,看这里!
- 翻译: 4.1 多层感知器MLP Multilayer Perceptrons pytorch
- SwiftUI 生命周期onAppear,onDisappear
- 易筋SpringBoot 2.1 | 第十一篇:SpringBoot使用actuator
- html5的file api,HTML5 File API
- 2021-08-24XLNET 语言模型
- 596. 超过5名学生的课
- 113. 路径总和 II
- Android studio 报错 Unknown host 'jcenter.bintray.com'
- 解决办法!!!!UnsupportedClassVersionError Unsupported major.minor version 52.0