普通索引
普通索引底层就是B+树(B+树的详细规则可参考https://blog.csdn.net/qq_26222859/article/details/80631121),中间节点存储key,叶子节点存储数据(Innodb引擎,最底层存储的是数据,MyISAM引擎,最底层存储的是数据所在地址,Innodb引擎的索引和数据是在一起的,MyISAM引擎的索引和数据是分开的,详情可以百度/谷歌 聚簇索引和非聚簇索引)。补充一点,Innodb的主键索引,底层叶子节点是存储数据,其他普通索引,底层叶子节点存的是数据对应的主键。就是说,查询数据的时候,可能会走2遍树。
下图摘自 《高性能MySQL》(第三版)
组合索引
组合索引底层也是B+树。网上关于组合索引底层数据结构的资料不是很多,查了一些资料,感觉有些博客写错了。下图摘自 《高性能MySQL(第三版)》,从下面的示意图可以看出,组合索引是 多个key存在一个节点内,底层叶子节点跟Innodb普通索引一样,存储的是数据。其他的细节跟普通索引基本一致。