码迷,mamicode.com
首页 > 其他好文 > 详细

【看懂执行计划】访问表的方式

时间:2021-04-30 12:37:47      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:查询   作用   时间   字段   查询条件   roc   一个   access   text   

全表扫描(Full Table Scans, FTS)

??全表扫描是指Oracle在访问目标表里的数据时,会从该表所占用的第一个区(EXTENT)的第一个块(BLOCK)开始扫描,一直扫描到该表的高水位线(HWM,High Water Mark),这段范围内所有的数据块Oracle都必须读到。Oracle会对这期间读到的所有数据施加目标SQL的where条件过滤,最后返回满足要求的数据。
??Oracle在做全表扫描操作时会使用多块读,在目标表数据量不大时执行效率是非常高的。全表扫描最大的问题是执行时间不稳定、不可控,会随着目标表数据量的递增而递增。
??高水位线特性的副作用:即使DELETE删光了目标表里的所有数据,高水位线还是会在原来的位置,全表扫描的时候还是会扫描高水位线下所有的数据块。
技术图片

会引起全表扫描的SQL

  1. 全模糊查询
  2. 查询条件中含有is null
  3. 查询条件中使用了不等于操作符(<>、!=)
  4. 对于组合索引,如果查询条件中没有前导列,也会引起全表扫描
  5. 对字段进行表达式操作
  6. 返回的行无任何限定条件

ROWID扫描(table access by ROWID)

??ROWID表示的是Oracle中数据行记录所在的物理存储位置,同数据块中的记录一一对应。Oracle通过ROWID去定位并访问数据的方法叫ROWID扫描。

ROWID的两层含义

  1. 根据SQL语句中输入的ROWID值直接去访问对应的行记录
    技术图片

  2. 通过访问相关索引,再根据索引得到的ROWID访问数据
    技术图片

技术图片

【看懂执行计划】访问表的方式

标签:查询   作用   时间   字段   查询条件   roc   一个   access   text   

原文地址:https://www.cnblogs.com/henry-chr/p/14720673.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!