美文网首页Mysql
InnoDB的索引

InnoDB的索引

作者: 奔向学霸的路上 | 来源:发表于2020-07-21 11:01 被阅读0次

分类

InnoDB的索引分为两大类:聚集索引与普通索引。

InnoDB规定每个表都必须有聚集索引:

  1. 如果定义了PK,那么PK就是聚集索引
  2. 如果没有定义,第一个非空 unique列就位聚集索引
  3. 如果再没有,会自动生成一个row-id作为聚集索引

结构

索引的结构为B+树

  1. 聚集索引:非叶子节点存储key,叶子节点存储行记录
  2. 普通索引:非叶子节点存储key,叶子节点存储value值
  3. 索引包含null:放在B+树的最左边

举例:

t(id PK, name KEY, sex, flag);
表中有四条记录:
1, shenjian, m, A
3, zhangsan, m, A
5, lisi, m, A
9, wangwu, f, B

聚集索引

上图(聚集索引)id为PK,叶子节点存储了所有的行记录

普通索引

上图(普通索引)name为普通索引,叶子节点存储了PK值。
所以对于普通索引,需要二次查找,先通过普通索引找到PK,再通过PK找到所有行记录。

索引中存在null的情况

上图为索引包含null的情况,放于最左边。

后记:覆盖索引

limit 用法

//语句一:从该参数(0)的下一条数据开始,第二个参数表示每次返回的数据条数。
select * from A limit 0,3;
语句一执行结果
//语句二:从第101条开始,读10条数
select * from B limit 100,10;
//语句三:从表的第2条开始,读10条
select * from C limit 10 offset 1
//等价于
select * from C limit 1,10

那么问题来了,如果一条SQL长这个样子:select * from C limit 100000,10
offset特别大,必然慢SQL,dba会call you!
怎么解决呢?

  1. 延迟加载(TODO具体怎么做,暂时没查过)
  2. 假设有以下SQL有组合索引(sex,score)
//方式一:
select <col> from A where sex = 'M' order by score limit 100000,10

改写为

//方式二:
select <col> from A inner join(select id from A where a.sex = 'M' order by score limit 100000,10) as a using(id)

方式一:同样是用到了联合索引,
方式二:这里利用了覆盖索引,先从覆盖索引中获取100010个id,在丢掉前100000条id,保留最后10个;
EXPLAIN各个含义解析TODO

相关文章

  • InnoDB索引

    1. InnoDB存储引擎索引概述 InnoDB支持以下常见索引: B+树索引 全文索引 哈希索引 ​  Inno...

  • 索引与算法

    innoDb存储引擎索引概述 支持的索引类型: 1.B+树索引 2.全文索引 哈希索引 innodb支持的hash...

  • 第五章 索引与算法(上)

    5.1 InnoDB存储引擎索引概述InnoDB存储引擎支持以下几种常见索引: B+树索引 全文索引 哈希索引 I...

  • Mysql的索引实践

    上次聊到Mysql的索引,特别是InnoDB索引,InnoDB所以为聚簇索引,所谓聚簇索引是说数据是存在索引中的,...

  • InnoDB存储引擎学习总结 第五章 索引

    常用命令 一 InnoDB存储引擎索引概述 InnoDB 支持 B+树索引、hash索引、全文索引,其中hash索...

  • MySql的索引实现

    MyISAM索引实现略InnoDB索引实现InnoDB的数据文件本身就是索引文件。MyISAM索引文件和数据文件是...

  • 《MySQL技术内幕:InnoDB存储引擎》第五章 索引与算法

    5.1 InnoDB存储引擎索引概述 InnoDB支持两种常见的索引 B+树索引 哈希索引(自适应的,会根据表的使...

  • 5-索引与算法

    1.InnoDB存储引擎索引概述 InnoDB支持以下几种常见的索引: B+树索引:传统意义上的索引,目前关系型数...

  • MySQL的全文索引Fulltext Index | 包括ngr

    内部实现 InnoDB Full-Text Index Design InnoDB的全文索引使用反向索引的设计。反...

  • MySql 索引

    聚集(聚族)索引 索引的叶子节点直接存放数据(InnoDB 主键索引采用的方式),InnoDB 采用B+树来实现聚...

网友评论

    本文标题:InnoDB的索引

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