MySQL实战 | 05 如何设计高性能的索引?
2018-12-14 本文已影响11人
hoxis
上回我们主要研究了为什么使用索引,以及索引的数据结构。今天带你了解如何设计高性能的索引。
其中,有这么一个点,说的是 InnoDB 引擎中使用的是聚簇索引,其主索引的实现树中的叶子结点存储的是完整的数据记录,而辅助索引中存储的则只是辅助键和主键的值。
这样在用辅助索引进行查询时,会先查出主键的值,然后再去主索引中根据主键的值查询目标值。
比如,假想一个表如下图存储了 4 行数据。其中 Id 作为主索引,Name 作为辅助索引。
Id | Name | Company |
---|---|---|
5 | Gates | Microsoft |
7 | Bezos | Amazon |
11 | Jobs | Apple |
14 | Ellison | Oracle |
对于聚簇索引,若使用主键索引进行查询,select * from tab where id = 14
这样的条件查找主键,则按照 B+ 树的检索算法即可查找到对应的叶节点,之后获得行数据。
若使用辅助索引进行查询,对 Name 列进行条件搜索,则需要两个步骤:
1、第一步在辅助索引 B+ 树中检索 Name,到达其叶子节点获取对应的主键值。
2、第二步根据主键值在主索引 B+ 树中再执行一次 B+ 树检索操作,最终到达叶子节点即可获取整行数据。
上面这个过程称为回表。
你的关注是对我最大的鼓励!最近搜集到传智播客 2018 最新 Python 和 Java 教程!关注本公众号,后台回复「2018」即可获取下载地址。
公众号提供CSDN资源免费下载服务!