Oracle回表与sql的优化

回表:

所谓的回表,就是先查索引,找到相对应的rowid,然后再通过rowid找到对应的数据。

所以,如果select * from XXX一定会出现回表的,毕竟你不可能把所有的列都建索引。

例如:

select * from bp_packing_report where create_date>sysdate-1/24

耗费:3656

 

 改为:

select create_date from bp_packing_report where create_date>sysdate-1/24

就不会出现回表现象了,因为在查询索引的时候就已经把数据查出来了,不再需要再根据rowid查对应的列内容了。

仅耗费57

 

区别上面两个图,上面比下面多了个 TABLE ACCESS BY INDEX ROWID BATCHED   就是表示根据rowid查相对应的数据

 

参考:https://ask.naixuejiaoyu.com/question/1450

posted @ 2021-03-05 14:51  masha2017  阅读(1043)  评论(0编辑  收藏  举报