聚簇索引

  • * 如果表设置了主键,则主键就是聚簇索引
  • * 如果表没有主键,则会默认第一个NOT NULL,且唯一(UNIQUE)的列作为聚簇索引
  • * 以上都没有,则会默认创建一个隐藏的row_id作为聚簇索引

其他 非聚簇

表中有四条记录:

  1, shenjian, m, A

  3, zhangsan, m, A

  5, lisi, m, A

  9, wangwu, f, B

聚集索引(存储行记录)           普通索引(叶子节点存储聚簇索引值)

聚簇索引查询会很快,因为可以直接定位到行记录

id是聚簇索引,name是普通索引。

普通索引  需要扫码两遍索引树

(1)先通过普通索引定位到主键值id=5;

(2)在通过聚集索引定位到行记录;

这就是所谓的回表查询,先定位主键值,再定位行记录,它的性能较扫一遍索引树更低。

如何实现覆盖索引

常见的方法是:将被查询的字段,建立到联合索引里去。

哪些场景适合使用索引覆盖来优化SQL

全表count查询优化

1

2

3

4

5

6

mysql> create table user(

  -> id int(10) auto_increment,

  -> name varchar(30),

  -> age tinyint(4),

  -> primary key (id),

  -> )engine=innodb charset=utf8mb4;

例如:select count(age) from user;

使用索引覆盖优化:创建age字段索引

1

create index idx_age on user(age);

列查询回表优化

前文在描述索引覆盖使用的例子就是

例如:select id,age,name from user where age = 10;

使用索引覆盖:建组合索引idx_age_name(age,name)即可

分页查询

例如:select id,age,name from user order by age limit 100,2;

因为name字段不是索引,所以在分页查询需要进行回表查询,此时Extra为Using filesort文件排序,查询性能低下。

使用索引覆盖:建组合索引idx_age_name(age,name)

参考https://www.jb51.net/article/180267.htm

什么是索引回表,如何避免(索引覆盖)相关推荐

  1. oracle 索引回表,oracle 索引简单总结

    建立索引时先进行排序,逻辑上分为Root(根块),Branch(茎块),leaf(叶子块).leaf中存在索引列的值.长度.和所在rowid,茎块存了指向具体茎块的指针,root块同理.这是逻辑上的划 ...

  2. mysql 回表 覆盖索引_mysql 14 覆盖索引+回表

    举个栗子,假如有一张表:tableA t(id PK, name KEY, sex, flag);  即id是聚集索引,name是普通索引. 分别执行2条SQL SQL1 :   select id, ...

  3. mysql非聚集索引区间查询_mysql的聚集索引和非聚集索引,回表查询,索引覆盖,最左前缀原则略解...

    什么是聚集索引和非聚集索引 我们知道 Mysql 底层是用 B+ 树来存储索引的,且数据都存在叶子节点.对于 InnoDB 来说,它的主键索引和行记录是存储在一起的,因此叫做聚集索引(clustere ...

  4. mysql版本的索引类型_【mysql】索引 回表 覆盖索引 索引下推

    索引类型 索引类型分为主键索引和非主键索引.(一定要牢记,是怎么存储数据的) 主键索引的叶子节点存的是整行数据.在 InnoDB 里,主键索引也被称为聚簇索引(clustered index). 非主 ...

  5. mysql 回表查询优化_MySQL中的回表查询与索引覆盖:一次百万级别分页查询使用Limit 从90秒到0.6毫秒的优化...

    这里写目录标题 事故现场 解决方案 提到的"回表查询" InnoDB的索引 什么是回表查询 怎么优化回表查询 事故现场 数据库使用的MySQL,有一个日志表,需要进行分页查询,于是 ...

  6. mysql数据库索引回表_简述 MySQL 数据库的覆盖索引与回表

    两大类索引 使用的存储引擎:MySQL5.7 InnoDB 聚簇索引 *如果表设置了主键,则主键就是聚簇索引 *如果表没有主键,则会默认第一个NOTNULL,且唯一(UNIQUE)的列作为聚簇索引 * ...

  7. oracle查询不走索引全表扫描,使用索引快速全扫描(Index FFS)避免全表扫描的若干场景-Oracle...

    使用索引快速全扫描(Index FFS)避免全表扫描的若干场景 什么使用使用Index FFS比FTS好? Oracle 8的Concept手册中介绍: 1. 索引必须包含所有查询中参考到的列. 2. ...

  8. oracle查看索引所在表空间及索引重建

    select index_name,tablespace_name from dba_indexes where index_name='INDEX_PS'; 移动 alter index INDEX ...

  9. mysql联合索引查找过程_(MYSQL)回表查询原理,利用联合索引实现索引覆盖

    一.什么是回表查询? 这先要从InnoDB的索引实现说起,InnoDB有两大类索引: 聚集索引(clustered index) 普通索引(secondary index) InnoDB聚集索引和普通 ...

  10. mysql主键创建非聚集索引_什么是聚集索引,非聚集索引,索引覆盖,回表,索引下推...

    聚集索引 我们先建如下的一张表 CREATE TABLE `student` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '学号',`name` var ...

最新文章

  1. 虚拟机ubuntu/pytorch/python出现killed已杀死
  2. C++ 中的 new/delete 和 new[]/delete[]
  3. 《剑指offer》二叉树的下一个节点
  4. O(n* (logn)^2 )的Shell排序——转自Matrix67的博客
  5. 因策划进军餐饮等虚假营销 TikTok前营销主管被开除
  6. string的基本用法
  7. Centos7的iso everything与DVD以及Live的区别
  8. 鸿蒙 OS 2.0 来了!值得开发者关注的是什么?
  9. 形式验证进阶 chipdriver_【饥荒进阶】烹饪基础:全食材系数详解-五耀整理
  10. 整理并记录电压比较器
  11. OneNote制作计划表
  12. VBoxGuestAdditions加载不了
  13. windows桌面股票价格软件
  14. artDialog | 经典的网页对话框组件
  15. 【NOIP提高组五校联考】挖金矿
  16. Arduino Uno 实验11——MQ-3酒精乙醇传感器模块
  17. Python 分类问题研究-Fisher线性判别
  18. python爬虫爬取网页壁纸图片(《底特律:变人》)
  19. 解决 HTTP/2 stream 1 was not closed cleanly before end of the underlying stream
  20. java 块注释_java的注释

热门文章

  1. Win10系统中查看是否开启虚拟化
  2. 计算机公式求所占百分比,如何使用Excel函数计算所占的比例
  3. sketchup 计算机配置,SketchUp Pro2019对电脑硬件要求
  4. 微信小程序--Todos案例
  5. win10如何设置保护色保护眼睛
  6. 肿瘤外显子数据分析 -- 20201119
  7. 为什么html中图片显示不出来,网页图片显示不出来该怎么办?
  8. 树莓派 能干啥_树莓派能干什么
  9. CSS实现标题样式(自用笔记)
  10. 10分钟带你彻底搞懂企业服务总线