索引

作者: ElevenKing | 来源:发表于2019-08-20 11:11 被阅读0次

如何避免回表查询?什么是索引覆盖? | 1分钟MySQL优化系列

原创: 58沈剑大佬
这篇文章写的太好了,正中尿点。

什么是回表查询?

InnoDB有两大类索引:1.聚集索引 2.普通索引

\color{red}{InnoDB聚集索引的叶子节点存储行记录,}因此, InnoDB必须要有,且只有一个聚集索引:

  • 如果表定义了PK,则PK就是聚集索引;

  • 如果表没有定义PK,则第一个not NULL unique列是聚集索引;

  • 否则,InnoDB会创建一个隐藏的row-id作为聚集索引;

\color{green}{画外音:所以PK查询非常快,直接定位行记录。}

\color{red}{InnoDB普通索引的叶子节点存储主键值。主键值、主键值、主键值!!!!}

结论
从普通索引无法直接定位行记录,需要通过普通索引树检索到主键值然后再通过聚集索引树最终定位到行数据,此为回表查询也。

来个图压压惊

什么是索引覆盖?

explain的输出结果Extra字段为Using index时,能够触发索引覆盖。
\color{red}{只需要在一棵索引树上就能获取SQL所需的所有列数据,无需回表,速度更快。}

如何实现索引覆盖?

盗一张图过来
盗两张图过来 盗三张图过来

哪些场景,可以利用索引覆盖来优化SQL?

  • 全表count查询优化 select count() 不要用* 括号里最好用索引字段

  • 列查询回表优化

select id,name,sex ... where name='shenjian';
这个例子不再赘述,将单列索引(name)升级为联合索引(name, sex),即可避免回表。

  • 分页查询

相关文章

  • MySQL索引

    MySQL索引 索引介绍 索引原理与分析 组合索引 索引失效分析 索引介绍 什么是索引索引:包括聚集索引、覆盖索引...

  • Mysql优化

    一.索引科普 主键索引 唯一索引 普通索引 单列索引 多列索引 聚簇索引 非聚簇索引 前缀索引 全文索引 二.优化...

  • Oracle 索引学习

    创建索引 标准语法 唯一索引 组合索引 反向键索引 示例 删除索引 修改索引 重建索引 联机重建索引 合并索引

  • MySQL索引

    索引的作用 查看索引 创建索引 删除索引 索引类型 强制索引和禁止某个索引

  • Pandas数据操作

    Pandas数据操作 Series索引 行索引 切片索引 不连续索引 布尔索引 DataFrame索引 列索引 不...

  • 深入理解四种数据库索引类型(- 唯一索引/非唯一索引 - 主键索

    唯一索引/非唯一索引 主键索引(主索引) 聚集索引/非聚集索引 组合索引 唯一索引/非唯一索引 唯一索引 1.唯一...

  • MYSQL索引

    mysql的4种常用索引类型:唯一索引,主键索引,全文索引,以及普通索引。 普通索引(INDEX):普通索引为索引...

  • 索引类型

    索引类型有: 主键索引; 唯一索引; 普通索引; 全文索引; 多列索引;

  • mysql 查询效率优化之 常用索引的几种类型 新手使用教程,少

    Mysql常见索引有:主键索引、唯一索引、普通索引、全文索引、组合索引(联合索引,多列索引) 一、建立的方法介绍 ...

  • MySql 数据查询优化

    1. MySQL索引类型: mysql的索引有5种:主键索引、普通索引、唯一索引、全文索引、聚合索引(多列索引)。...

网友评论

      本文标题:索引

      本文链接:https://www.haomeiwen.com/subject/pyjusctx.html