你的位置:

问答吧

-> Oracle

-> 问题详情

请教大家: 经常在sql调优过程中提到避免“回表”,具体是指什么意思???3Q

如题,不甚感激!!!!

[ 本帖最后由 oracledbadba 于 2010-8-24 16:57 编辑 ]

作者: oracledbadba

发布时间: 2010-08-23

QUOTE:原帖由 oracledbadba 于 2010-8-23 16:48 发表

如题,不甚感激!!!!

[Copy to clipboard] [ - ]CODE:

plan_hash id options object_name rows bytes cost temp

2060332794 0 SELECT STATEMENT     2

2060332794 1 SORT AGGREGATE  1  24  0

2060332794 2  TABLE ACCESS BY INDEX ROWID ORDER0 1  24  2

2060332794 3   INDEX RANGE SCAN ORDER0_AUCTIONID 1   1

比如这样的执行计划,先索引扫描,再通过rowid去取索引中未能提供的数据,即为回表。

作者: xzh2000

发布时间: 2010-08-23

多谢,您的意思是:比如 表t的索引列为a,然后我执行查询:select a,b from t where a = 'xxx';

这样的话,靠a上的索引提供不了查询所要的数据a+b,所以要去表中找,这个过程叫做回表?

如果不对,请大家指正一下,谢谢了!!

作者: oracledbadba

发布时间: 2010-08-23

第一次听说回表。按照xzh2000  的理解

你的理解是正确的。。找的时候是通过ROWID关联表记录的

作者: gaopengtttt

发布时间: 2010-08-23

观望,第一次听说 回表 !

作者: 红叶DBA

发布时间: 2010-08-23

见识了

作者: huanhuanlove

发布时间: 2010-08-23

QUOTE:原帖由 oracledbadba 于 2010-8-23 17:25 发表

多谢,您的意思是:比如 表t的索引列为a,然后我执行查询:select a,b from t where a = 'xxx';

这样的话,靠a上的索引提供不了查询所要的数据a+b,所以要去表中找,这个过程叫做回表?

如果不对,请大家指正一下,谢谢了!!

我猜应该是这个意思,btw:这个回表,也不容易避免吧?

作者: cryyyy

发布时间: 2010-08-23

lz搞啊,1p。。。。那是系统自动给的红包啊。。。。

作者: 熊猫儿

发布时间: 2010-08-23

“回表”一般就是指执行计划里显示的“TABLE ACCESS BY INDEX ROWID”。

例如select的字段里有索引不包含的列,

SQL> select ename from emp  where empno =1;

Execution Plan

----------------------------------------------------------

Plan hash value: 4066871323

----------------------------------------------------------------------

| Id  | Operation                   | Name   | Rows  | Bytes | Cost  |

----------------------------------------------------------------------

|   0 | SELECT STATEMENT            |        |     1 |     8 |     1 |

|   1 |  TABLE ACCESS BY INDEX ROWID| EMP    |     1 |     8 |     1 |

|*  2 |   INDEX UNIQUE SCAN         | PK_EMP |     1 |       |     1 |

----------------------------------------------------------------------

Predicate Information (identified by operation id):

---------------------------------------------------

2 - access("EMPNO"=1)

再例如,虽然只查询索引里的列,但是需要回表过滤掉其他行。

SQL> select empno from emp  where empno =1 and ename='hao';

Execution Plan

----------------------------------------------------------

Plan hash value: 4066871323

----------------------------------------------------------------------

| Id  | Operation                   | Name   | Rows  | Bytes | Cost  |

----------------------------------------------------------------------

|   0 | SELECT STATEMENT            |        |     1 |     8 |     1 |

|*  1 |  TABLE ACCESS BY INDEX ROWID| EMP    |     1 |     8 |     1 |

|*  2 |   INDEX UNIQUE SCAN         | PK_EMP |     1 |       |     1 |

----------------------------------------------------------------------

Predicate Information (identified by operation id):

---------------------------------------------------

1 - filter("ENAME"='hao')

2 - access("EMPNO"=1)

作者: viadeazhu

发布时间: 2010-08-23

QUOTE:原帖由 viadeazhu 于 2010-8-23 21:02 发表

“回表”一般就是指执行计划里显示的“TABLE ACCESS BY INDEX ROWID”。

例如select的字段里有索引不包含的列,

SQL> select ename from emp  where empno =1;

Execution Plan

----------------------------------------------------------

Plan hash value: 4066871323

----------------------------------------------------------------------

| Id  | Operation                   | Name   | Rows  | Bytes | Cost  |

----------------------------------------------------------------------

|   0 | SELECT STATEMENT            |        |     1 |     8 |     1 |

|   1 |  TABLE ACCESS BY INDEX ROWID| EMP    |     1 |     8 |     1 |

|*  2 |   INDEX UNIQUE SCAN         | PK_EMP |     1 |       |     1 |

----------------------------------------------------------------------

Predicate Information (identified by operation id):

---------------------------------------------------

2 - access("EMPNO"=1)

再例如,虽然只查询索引里的列,但是需要回表过滤掉其他行。

SQL> select empno from emp  where empno =1 and ename='hao';

Execution Plan

----------------------------------------------------------

Plan hash value: 4066871323

----------------------------------------------------------------------

| Id  | Operation                   | Name   | Rows  | Bytes | Cost  |

----------------------------------------------------------------------

|   0 | SELECT STATEMENT            |        |     1 |     8 |     1 |

|*  1 |  TABLE ACCESS BY INDEX ROWID| EMP    |     1 |     8 |     1 |

|*  2 |   INDEX UNIQUE SCAN         | PK_EMP |     1 |       |     1 |

----------------------------------------------------------------------

Predicate Information (identified by operation id):

---------------------------------------------------

1 - filter("ENAME"='hao')

2 - access("EMPNO"=1)

good!

作者: jet_life

发布时间: 2010-08-23

good

作者: yellowlee

发布时间: 2010-08-23

good,回表嘛,就是回到表中查一下,和完全从索引中查多了一步,呵呵,字段能从索引中全部获取那就不要回表啦

作者: dingjun123

发布时间: 2010-08-23

怎么能避免回表?不是把所有的字段全加进索引里吧?

作者: hotdog04

发布时间: 2010-08-23

今天有学到了!

作者: 红叶DBA

发布时间: 2010-08-24

貌似刻意去避免它付出的代价太大了吧

作者: 鼠标摸MM

发布时间: 2010-08-24

QUOTE:原帖由 hotdog04 于 2010-8-23 23:44 发表

怎么能避免回表?不是把所有的字段全加进索引里吧?

是需要的字段不是所有字段 使用FULL INDEX SCAN、、

作者: gaopengtttt

发布时间: 2010-08-24

这种东西不用刻意去回避  否则多建些无用的索引代价更大

作者: 伊斯力

发布时间: 2010-08-24

QUOTE:原帖由 hotdog04 于 2010-8-23 23:44 发表

怎么能避免回表?不是把所有的字段全加进索引里吧?

作者: sundog315

发布时间: 2010-08-24

感谢大家!学习了

作者: oracledbadba

发布时间: 2010-08-24

oracle避免回表,请教大家: 经常在sql调优过程中提到避免“回表”,具体是指什么意思???3Q...相关推荐

  1. Oracle数据库sql调优

    最近做的一个项目涉及到大数据量的数据表查询.数据表总量在7亿-20亿左右,以主键建立全局唯一索引,分区策略是hash分区+范围分区,很大部分情况下查询条件命中记录数超过万条,单次返回前XX条记录.在调 ...

  2. Oracle Hints,Oracle并行模式(Parallel) /*+parallel(t,4)*/ 在SQL调优中的重要作用

    /*+parallel(t,4)*/在SQL调优中的重要作用! 2013年11月17日 12:59:24 雾里看花5566 阅读数:5422更多 个人分类: 数据库-oracle 谈谈HINT /*+ ...

  3. oracle trim 性能,ORACLE sql调优之记录一次trim函数引发的大表全表扫描

    2017年8月14日,一地市oracle相关的调度程序ETL抽取速度奇慢,sql语句每次执行平均时间要9秒左右,如果所示: 该调度过程涉及的sql语句如下: select count(*) from ...

  4. sql如何遍历几百万的表_Oracle PL/SQL调优技巧分享

    原创作者:如人饮水冷暖自知 责任编辑:AcDante 前言 开门见山,今天和大家聊聊如何对PL/SQL代码进行优化,以及如何编写高效的PL/SQL代码,如果您是开发DBA,或者您是数据库开 发人员,对 ...

  5. oracle sql 执行计划分析_Oracle SQL调优系列之看懂执行计划explain

    1.文章写作前言简介 SQL调优系列博客链接:SQL调优专栏 之前曾经拜读过<收获,不止sql调优>一书,此书是国内DBA写的一本很不错的调优类型的书,是一些很不错的调优经验的分享.虽然读 ...

  6. oracle sql 分区查询语句_Oracle SQL调优之分区表

    一.分区表简介 分区通过让您将它们分解为更小且更易于管理的分区(称为分区)来解决支持非常大的表和索引的关键问题.不需要修改SQL查询和DML语句以访问分区表.但是,在定义分区之后,DDL语句可以访问和 ...

  7. Oracle SQL调优系列之no_unnest和unnest用法简介

    Oracle调优之no_unnest和unnest用法简介 本博客介绍Oracle SQL调优的一种常用也是很实用的方法,也即/*+no_unnest */和/*+ unnest*/,介绍Oracle ...

  8. Oracle中SQL调优(SQL TUNING)之最权威获取SQL执行计划大全

    该文档为根据相关资料整理.总结而成,主要讲解Oracle数据库中,获取SQL语句执行计划的最权威.最正确的方法.步骤,此外,还详细说明了每种方法中可选项的意义及使用方法,以方便大家和自己日常工作中查阅 ...

  9. 如何判断数据库中的两个表是否相同(相等)?比较数据库中的两个表是否完全相同,包括字段和每条记录

    如何判断数据库中的两个表是否相同(相等)?比较数据库中的两个表是否完全相同,包括字段和每条记录 目录

最新文章

  1. 搭建hbase1.2.5完全分布式集群
  2. Redis 核心篇:唯快不破的秘密
  3. influxdb 客户端工具_性能工具之Jmeter小白入门系列之六
  4. 0010101 java_JAVA入门教程运算符和表达式
  5. python中int转换为时间戳_python日期和时间戳互相转化操作详解
  6. java报505_Java调用URL错误,报505
  7. [整理] TPM 2.0 设备串口通讯协议中文文档
  8. 全文搜索工具 AnyTXT Searcher(转载)
  9. StringUtils简单判断字符串是否为null或者空字符串
  10. 基于Android的虚拟校园移动学习系统
  11. 什么是软件测试中的探索性测试(完整指南)(三)
  12. 7-3 作业调度算法--高响应比优先
  13. matlab在生物学中的应用,MATLAB在生物医学信号处理中的应用
  14. 我去扒了杜蕾斯的微博
  15. 波数与波长 matlab,波长与波数的关系为.PPT
  16. 支原体最新研究进展(2022年3月)
  17. 两种电子配线架的原理比较
  18. 已解决cython_bbox安装出现的问题
  19. 5G工业相机,让机器变身“超级工人”
  20. 两个累加符号∑如何计算,以及如何用python实现两个∑累加运算 | markdown下latex公式对齐

热门文章

  1. Python中的True和False详解
  2. 话生态 | F-One联手思凯普,靠谱!
  3. U2-Net: Going Deeper with Nested U-Structure for Salient Object Detection|环境搭建|人物素描 测试 简记 |
  4. 移动端加载MVT矢量瓦片
  5. 不乱于心,不困于情,不畏将来,不念过往
  6. 物联网操作系统系列文章之-软件平台的力量
  7. Esper学习之十三:EPL语法(九)
  8. Pyinstaller将yolov5的detect.py封装成detect.exe,并用C++调用
  9. Web前端技术基础实验报告二之格式化文本、段落与列表
  10. 芋道 Spring Boot 消除冗余代码 Lombok 入门