重新复习时,可以先看这两篇文章:深入浅出索引

https://time.geekbang.org/column/article/69236

https://time.geekbang.org/column/article/69636

什么是索引? 什么是B树

https://app.yinxiang.com/shard/s38/nl/9880513/2d8630b5-06f7-4eaa-afd7-7fd95e633846/

索引的出现其实就是为了提高数据查询的效率。

在 MySQL 中,索引是在存储引擎层实现的,所以并没有统一的索引标准,即不同存储引擎的索引的工作方式并不一样。而即使多个存储引擎支持同一种类型的索引,其底层的实现也可能不同。由于 InnoDB 存储引擎在 MySQL 数据库中使用最为广泛。

在 InnoDB 中,表都是根据主键顺序以索引的形式存放的,这种存储方式的表称为索引组织表。又因为前面我们提到的,InnoDB 使用了 B+ 树索引模型,所以数据都是存储在 B+ 树中的。每一个索引在 InnoDB 里面对应一棵 B+ 树。

什么是聚簇索引? MyISAM 和 InnoDB 使用的是什么索引?

https://app.yinxiang.com/shard/s38/nl/9880513/069d4bdb-e720-4fa5-8593-568d16c8748c/

索引的建立和维护

覆盖索引

如果执行的语句是 select ID from T where k between 3 and 5,这时只需要查 ID 的值,而 ID 的值已经在 k 索引树上了,因此可以直接提供查询结果,不需要回表。也就是说,在这个查询里面,索引 k 已经“覆盖了”我们的查询需求,我们称为覆盖索引。由于覆盖索引可以减少树的搜索次数,显著提升查询性能,所以使用覆盖索引是一个常用的性能优化手段。

最左前缀

回表查询和索引下推