8 访问路径介绍--优化主题系列

8.1 tableaccess full

TABLE ACCESS FULL 全表扫描,多块读,等待事件:db file scattered read

如果是并行全表扫描,等待事件:direct path read

11g 有个新特征,在进行全表扫描的时候也会产生direct path read

OLTP环境中要通过 10949event禁止该新特征

OLAP环境中可以不用禁止

如果表上面有大量的行迁链接,会是单块读等待事件表现为db filesequential read

如果表上面发生了一个大事物,全表扫描会从UNDO读取前镜像,也会是单块读

HINT FULL(表名/别名)

 

提问:假设test表有10GB的数据如果没有索引是不是走全表扫描??

select id from test where owner='SYS';

全表扫描是只扫描id owner还是全扫??是不是 10GB的数据全部扫一遍??

高水位下的都扫对吧??这个时候可以看是不是碎片太多了??是不是经常DML碎片就多??

如果是并行全表扫描,等待事件:direct path read


8.2 rowidscan

ROWID SCAN   根据ROWID取得数据都是单块读

TABLEACCESS BY USER ROWID   直接用ROWID取得数据比如 whererowid='xxxxxx'

TABLEACCESS BY INDEX ROWID  通过索引的ROWID获得数据

 

提问:为什么通过ROWID回表是单块读??

ROWID是不是一条数据为了读一条数据读多个块合理吗??一个ROWID对应一个块

当然一个ROWID可能对应多个块行迁移


8.3 indexunique scan

INDEX UNIQUE SCAN 索引唯一扫描。单块读只可能发生在unique index/primary key等值查找

等待事件:db filesequential read但是你几乎看不到,因为只读一条数据

HINT 无需指定,有索引会自动走INDEXUNIQUE SCAN

 

OLAP这个很少见数据仓库不要主键一般不要建索引不然插入数据很慢


8.4 indexrange scan

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值