oracle避免回表,请教大家: 经常在sql调优过程中提到避免“回表”,具体是指什么意思???3Q...
你的位置:
问答吧
-> 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...相关推荐
- Oracle数据库sql调优
最近做的一个项目涉及到大数据量的数据表查询.数据表总量在7亿-20亿左右,以主键建立全局唯一索引,分区策略是hash分区+范围分区,很大部分情况下查询条件命中记录数超过万条,单次返回前XX条记录.在调 ...
- Oracle Hints,Oracle并行模式(Parallel) /*+parallel(t,4)*/ 在SQL调优中的重要作用
/*+parallel(t,4)*/在SQL调优中的重要作用! 2013年11月17日 12:59:24 雾里看花5566 阅读数:5422更多 个人分类: 数据库-oracle 谈谈HINT /*+ ...
- oracle trim 性能,ORACLE sql调优之记录一次trim函数引发的大表全表扫描
2017年8月14日,一地市oracle相关的调度程序ETL抽取速度奇慢,sql语句每次执行平均时间要9秒左右,如果所示: 该调度过程涉及的sql语句如下: select count(*) from ...
- sql如何遍历几百万的表_Oracle PL/SQL调优技巧分享
原创作者:如人饮水冷暖自知 责任编辑:AcDante 前言 开门见山,今天和大家聊聊如何对PL/SQL代码进行优化,以及如何编写高效的PL/SQL代码,如果您是开发DBA,或者您是数据库开 发人员,对 ...
- oracle sql 执行计划分析_Oracle SQL调优系列之看懂执行计划explain
1.文章写作前言简介 SQL调优系列博客链接:SQL调优专栏 之前曾经拜读过<收获,不止sql调优>一书,此书是国内DBA写的一本很不错的调优类型的书,是一些很不错的调优经验的分享.虽然读 ...
- oracle sql 分区查询语句_Oracle SQL调优之分区表
一.分区表简介 分区通过让您将它们分解为更小且更易于管理的分区(称为分区)来解决支持非常大的表和索引的关键问题.不需要修改SQL查询和DML语句以访问分区表.但是,在定义分区之后,DDL语句可以访问和 ...
- Oracle SQL调优系列之no_unnest和unnest用法简介
Oracle调优之no_unnest和unnest用法简介 本博客介绍Oracle SQL调优的一种常用也是很实用的方法,也即/*+no_unnest */和/*+ unnest*/,介绍Oracle ...
- Oracle中SQL调优(SQL TUNING)之最权威获取SQL执行计划大全
该文档为根据相关资料整理.总结而成,主要讲解Oracle数据库中,获取SQL语句执行计划的最权威.最正确的方法.步骤,此外,还详细说明了每种方法中可选项的意义及使用方法,以方便大家和自己日常工作中查阅 ...
- 如何判断数据库中的两个表是否相同(相等)?比较数据库中的两个表是否完全相同,包括字段和每条记录
如何判断数据库中的两个表是否相同(相等)?比较数据库中的两个表是否完全相同,包括字段和每条记录 目录
最新文章
- 搭建hbase1.2.5完全分布式集群
- Redis 核心篇:唯快不破的秘密
- influxdb 客户端工具_性能工具之Jmeter小白入门系列之六
- 0010101 java_JAVA入门教程运算符和表达式
- python中int转换为时间戳_python日期和时间戳互相转化操作详解
- java报505_Java调用URL错误,报505
- [整理] TPM 2.0 设备串口通讯协议中文文档
- 全文搜索工具 AnyTXT Searcher(转载)
- StringUtils简单判断字符串是否为null或者空字符串
- 基于Android的虚拟校园移动学习系统
- 什么是软件测试中的探索性测试(完整指南)(三)
- 7-3 作业调度算法--高响应比优先
- matlab在生物学中的应用,MATLAB在生物医学信号处理中的应用
- 我去扒了杜蕾斯的微博
- 波数与波长 matlab,波长与波数的关系为.PPT
- 支原体最新研究进展(2022年3月)
- 两种电子配线架的原理比较
- 已解决cython_bbox安装出现的问题
- 5G工业相机,让机器变身“超级工人”
- 两个累加符号∑如何计算,以及如何用python实现两个∑累加运算 | markdown下latex公式对齐
热门文章
- Python中的True和False详解
- 话生态 | F-One联手思凯普,靠谱!
- U2-Net: Going Deeper with Nested U-Structure for Salient Object Detection|环境搭建|人物素描 测试 简记 |
- 移动端加载MVT矢量瓦片
- 不乱于心,不困于情,不畏将来,不念过往
- 物联网操作系统系列文章之-软件平台的力量
- Esper学习之十三:EPL语法(九)
- Pyinstaller将yolov5的detect.py封装成detect.exe,并用C++调用
- Web前端技术基础实验报告二之格式化文本、段落与列表
- 芋道 Spring Boot 消除冗余代码 Lombok 入门