索引的本质
索引是帮助MySQL高效获取数据的排好序的数据结构
索引数据结构
- 二叉树
- 红黑树
- Hash表
- B+Tree
B-Tree
B-Tree 叶节点具有相同的深度,叶节点的指针为空,所有索引元素不重复,节点中的数据索引从左到右递增排列
![](https://file.jishuzhan.net/article/1781649236908052481/37c16663611c2dd1cd2c4751599e4084.webp)
B+Tree(B-Tree变种)
非叶子节点不存储data,只存储索引(冗余),可以放更多的索引, 叶子节点包含所有索引字段, 叶子节点用指针连接,提高区间访问的性能
![](https://file.jishuzhan.net/article/1781649236908052481/b8c1483d99db79bc0265fc2bccb16c0d.webp)
Hash
对索引的key进行一次hash计算就可以定位出数据存储的位置 。很多时候Hash索引要比B+ 树索引更高效 但是仅能满足 "=","IN",不支持范围查询 hash冲突问题。
MyISAM索引文件和数据文件是分离的(非聚集)
![](https://file.jishuzhan.net/article/1781649236908052481/a18377a408370daf9713128a30704891.webp)
联合索引的底层存储结构长什么样?
![](https://file.jishuzhan.net/article/1781649236908052481/bd72fae0976cc27b8a0e920cf210aa72.webp)