MySQL, Oracle, Linux, 软件架构及大数据技术知识分享平台

网站首页 > 数据库 / 正文

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

2024-11-26 21:14 huorong 数据库 11 ℃ 0 评论

什么是回表

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

select * from dba_objects where owner='SYS'

回表对SQL性能的影响

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

select * from dba_objects where owner='SYS'

什么样的SQL回产生回表

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

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

Select * from table where ...

消除回表

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

Tags:oracle的优化

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言