深入探索Oracle 回表原理、影响与优化技巧

点击关注晓彬聊数据重磅干货第一时间送达

什么是回表

当对一个列创建索引之后,索引会包含该列的键值以及键值对应行所在的rowid。通过索引中记录的rowid访问表中的数据就叫回表。执行计划中的TABLE ACCESS BY INDEX ROWID就表示回表

select * from dba_objects where owner='SYS'
深入探索Oracle 回表原理、影响与优化技巧

回表对SQL性能的影响

回表一般是单块读,回表次数太多会严重影响SQL性能,如果回表次数太多,就不应该走索引扫描了,应该直接走全表扫描。Oracle12c及后面版本的新功能批量回表(TABLE ACCESS BY INDEX ROWID BATCHED)在一定程度上改善了单行回表(TABLE ACCESS BY INDEX ROWID) 的性能。

select * from dba_objects where owner='SYS'
深入探索Oracle 回表原理、影响与优化技巧

什么样的SQL回产生回表

查询列不在索引中就会产生回表。

例如:以下语句一定会产生回表,如果回表次数太多,会严重降低SQL性能。

Select * from table where ...

消除回表

我们通常会建立组合索引来消除回表,从而提升查询性能。当要查询的列也包含在索引中,这个时候就不需要回表了。直接通过rowid对查询到所需要的列数据。

原文始发于微信公众号(晓彬聊数据):深入探索Oracle 回表原理、影响与优化技巧

© 版权声明
THE END
喜欢就支持一下吧
点赞14 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容