回表
来源:互联网 发布:2016年全年经济数据 编辑:程序博客网 时间:2024/05/20 22:28
什么是回表
怎么避免回表
什么是回表?
简单来说就是数据库根据索引找到了指定的记录所在行后,还需要根据rowid再次到数据块里取数据的操作;
示例:基本表结构与索引情况如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
create
table
MOB_ANALYZE_NAME
(
PHONETYPE VARCHAR2(100),
TYPENAME VARCHAR2(500)
;
--这时候还没有索引 访问数据块为 是全表扫描 效率肯定不行
select
a.phonetype
from
mob_analyze_name a
where
a.phonetype =
'zg_20090611_00057'
;
--加入索引
create
index
IDX_MOB_ANALYZE_NAME_ID
on
MOB_ANALYZE_NAME (PHONETYPE);
--该语句不会回表 从索引块里就可取出全部数据
select
a.phonetype
from
mob_analyze_name a
where
a.phonetype =
'zg_20090611_00057'
;
--该语句取得数据行rowid后 将会根据rowid回表查询出typename,因为有两行,就回表多查了2个数据块
--此处遗留一个问题是 一行数据是否有可能放到两个数据块里,那是不是可能会出现本来查询一行数据 就多访问两个数据块
select
a.typename
from
mob_analyze_name a
where
a.phonetype =
'zg_20090611_00057'
;//2行
怎么避免回表?
如果只是简单的查询name id 这种情况 可以考虑创建组合索引 要根据实际情况考虑创建索引的成本!
1
2
drop
index
IDX_MOB_ANALYZE_NAME_ID ;
create
index
IDX_MOB_ANALYZE_NAME_ID_NAME
on
MOB_ANALYZE_NAME (PHONETYPE, TYPENAME);
- 回表
- 回表
- ORACLE回表
- ORACLE回表
- ORACLE回表(一)
- ORACLE回表(二)
- ORACLE回表(三)
- 根据rowid回表
- 回表rowid 定义以及回表查询优化
- Mysql explain用法和性能分析
- Hdu 1072 Nightmare[Bfs]
- ACM-DP之Common Subsequence——HDU1159
- Django 学习笔记(七)
- Mysql导出表结构及表数据的方法
- 回表
- MySql 给表添加一个联合唯一索引
- LoaderCallbacks<RESTLoader.RESTResponse> 自动重新调用
- 黑客常用工具
- python 操作mysql
- 我的Android进阶之旅------>使用ThumbnailUtils类获取视频的缩略图
- PHPDocumentor 的使用方法
- 内容匹配广告投放技术6:品牌展示广告(二)(百度文库课程)
- 最少钱币数 - 动态规划法求解 - 可输出最终找零方案