暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

程序猿的向往 2021-05-02
346

点击上方蓝字关注我们

全表扫描(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对字段进行表达式操作
6SQL语句没有where条件限定

ROWID扫描(table access by ROWID)

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

ROWID扫描的两层含义

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

2
通过访问相关索引,再根据索引得到的ROWID访问数据

扫码

长按关注

关注

惊喜不断

点个在看你最好看

文章转载自程序猿的向往,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论