mysql innodb索引覆盖_Mysql InnoDB 覆盖索引与回表
什么是回表查询?
InnoDB使用聚集索引,数据根据主索引存储在叶子节点上,辅助索引的data域存储主键。
myisam使用非聚集索引,即主索引(B+树)的叶子节点存储数据的地址(需要回表),myisam可以没有主键,数据也不是存储在B+主索引的叶子节点上的。
设有表:
t(id PK, name KEY, sex, flag);
画外音:id是聚集索引,name是普通索引。
表中有四条记录:
1, shenjian, m, A
3, zhangsan, m, A
5, lisi, m, A
9, wangwu, f, B
即:
两个B+树索引分别如上图:
(1)id为PK,聚集索引,叶子节点存储行记录;
(2)name为KEY,普通索引,叶子节点存储PK值,即id;
比如执行sql select * from t where name='ls';
需要扫码两遍索引树:
(1)先通过普通索引定位到主键值id=5;
(2)在通过聚集索引定位到行记录;
这就是回表查询
什么是索引覆盖?
如果一个索引包含(或覆盖)所有需要查询的字段的值,称为‘覆盖索引',
就是select的数据列只用从索引中就能够取得,不必从数据表中读取。
如何实现索引覆盖进行优化查询?
常见的方法是:将被查询的字段,建立到联合索引里去。
create table user (
id int primary key,
name varchar(20),
sex varchar(5),
index(name)
)engine=innodb;
select id,name from user where name='shenjian';
能够命中name索引,索引叶子节点存储了主键id,通过name的索引树即可获取id和name,无需回表,符合索引覆盖,效率较高。
第二个SQL语句:
select id,name,sex* from user where name='shenjian';*
能够命中name索引,索引叶子节点存储了主键id,但sex字段必须回表查询才能获取到,不符合索引覆盖,需要再次通过id值扫码聚集索引获取sex字段,效率会降低。
如果把(name)单列索引升级为联合索引(name, sex)就不同了。
create table user (
id int primary key,
name varchar(20),
sex varchar(5),
index(name, sex)
)engine=innodb;
select id,name ... where name='shenjian';
select id,name,sex* ... where name='shenjian';*
都能够命中索引覆盖,无需回表。
mysql innodb索引覆盖_Mysql InnoDB 覆盖索引与回表相关推荐
- mysql 回表查询优化_MySQL优化:如何避免回表查询?什么是索引覆盖?
转自:https://mp.weixin.qq.com/s?__biz=MjM5ODYxMDA5OQ==&mid=2651962609&idx=1&sn=46e59691257 ...
- mysql 隐藏中间四位_MySQL知识体系——索引
本文直切主题,针对InnoDB引擎描述索引及优化策略.在开始之前,需要读者了解: 二叉查找树(包括2-3查找树.红黑树等数据结构) MySQL的InnoDB引擎基础知识 索引初探 要了解索引,当然要了 ...
- mysql非聚集索引区间查询_mysql的聚集索引和非聚集索引,回表查询,索引覆盖,最左前缀原则略解...
什么是聚集索引和非聚集索引 我们知道 Mysql 底层是用 B+ 树来存储索引的,且数据都存在叶子节点.对于 InnoDB 来说,它的主键索引和行记录是存储在一起的,因此叫做聚集索引(clustere ...
- mysql 索引原理_MySQL InnoDB索引原理和算法
也许你经常用MySQL,也会经常用索引,但是对索引的原理和高级功能却并不知道,我们在这里一起学习下. InnoDB存储索引 在数据库中,如果索引太多,应用程序的性能可能会受到影响:如果索引太少,又会对 ...
- mysql btree检索策略_MySQL之Btree索引和HASH索引的区别以及索引优化策略
索引是帮助mysql获取数据的数据结构.最常见的索引是Btree索引和Hash索引. 不同的引擎对于索引有不同的支持:Innodb和MyISAM默认的索引是Btree索引:而Mermory默认的索引是 ...
- mysql索引引擎_mysql搜索引擎和索引那些事
mysql的存储引擎 三种存储方式 **InnoDB **(默认) 一个文件存储表结构,一个存储数据和目录(索引) # 一个文件 book_name | author| press | price | ...
- mysql 唯一索引和复合索引 区别_MySQL复合唯一索引分析
MySQL复合唯一索引分析 关于复合唯一索引(unique key 或 unique index),网上搜索不少人说:"这种索引起到的关键作用是约束,查询时性能上没有得到提高或者查询时根本没 ...
- mysql innodb事务中_MySQL InnoDB如何保证事务特性示例详解
前言 如果有人问你"数据库事务有哪些特性"?你可能会很快回答出原子性.一致性.隔离性.持久性即ACID特性.那么你知道InnoDB如何保证这些事务特性的吗?如果知道的话这篇文章就可 ...
- mysql必须的组件_mysql innodb的重要组件
innodb包涵如下几个组件 一.innodb_buffer_pool: 1 它主要用来缓存数据与索引(准确的讲由于innodb中的表是由聚集索引组织的,所以数据只不是过主键这个索引的叶子结点). 二 ...
最新文章
- Python使用numpy中trim_zeros函数去除首尾0值的语法
- 简单说一下,你对CPU缓存的了解?
- Android Studio——怎么设置代码补全以及提示(详细)?
- 表数据比图数据更难处理
- RHEL5中YUM命令解决RPM包依赖性
- java实现随机抽取试题组成试卷
- centos7 安装python3.7.1(亲测下面的安装依赖包)
- 本地存储之sessionStorage
- 从Richard Young教授的系列研究看超级增强子发现背后的故事 (附超级增强子鉴定代码)
- 完全清除一个带包的项目文件的方法
- 在Django将已有数据库生成models文件
- 西瓜书+实战+吴恩达机器学习(十三)监督学习之随机森林 Random Forest
- Codeforces 319C DP 斜率优化
- MyBatis笔记二:配置
- python tornade 表单和模板
- qq不加好友实现网页在线聊天(qq在线客服)
- 天猫精灵打开电脑(网络唤醒)
- plc梯形图的c语言写法,PLC梯形图讲解.ppt
- b站网页版没有html,b站网页版
- 【树莓派C语言开发】实验15:电位计传感器(关联PCF8951)
热门文章
- Spring集成web环境步骤
- 常用IOC注解按照作用分类
- Request_获取请求参数通用方式演示
- 【OOP】零钱通项目
- 1-100以内的数求和,求出当和第一次大于20的当前数
- Asp.net MVC Filter监控页面性能和运行时间
- PostgreSQL 10.1 手册_部分 II. SQL 语言_第 9 章 函数和操作符_9.18. 数组函数和操作符...
- chapter3.1封装和解构
- poj3296--Rinse(三分)
- 清华裴丹:AIOps 落地路线图