用来记笔记的软件电脑端登不进去了,本来打算过了这段时期,专门总结下知识点,那就直接写在这里吧,有什么问题欢迎指出。
按功能分类
- 普通索引
- 唯一索引
- 主键索引
- 组合索引
- 外键索引
- 全文索引
按结构分类
- B+ Tree索引:InnoDB和MyISAM
- Hash索引:Memory
B+ Tree
B+ Tree 是基于 B Tree 和叶子节点顺序访问指针进行实现的,一个节点中的key从左到右非递减排列。
Hash
哈希索引能以 O(1) 时间进行查找,但是失去了有序性:
- 无法用于排序与分组;
- 只支持精确查找,无法用于部分查找和范围查找。
InnoDB 存储引擎有一个特殊的功能叫“自适应哈希索引”,当某个索引值被使用的非常频繁时,会在 B+Tree 索引之上再创建一个哈希索引,这样就可以实现快速的哈希查找。
InnoDB存储引擎
-
InnoDB的数据文件本身就是索引文件。
-
叶子节点data域保存了完整的数据记录,这个索引的key是数据表的主键,因此InnoDB表数据文件本身就是主索引(这样的索引成为聚集索引)。
-
InnoDB的辅助索引data域存储相应记录主键的值。这使得按主键的搜索十分高效,但是辅助索引搜索需要检索两遍索引。
MyISAM存储引擎
MyISAM引擎使用B+Tree作为索引结构,叶节点的data域存放的是数据记录的地址,索引文件和数据文件是分离的。
比较
MyISAM存储引擎
- 访问快,不支持事务和外键。
- 如果应用是以查询操作和插入操作为主,只有很少的更新和删除操作(读密集);不要求事务。
InnoDB存储引擎(5.5之后的默认引擎)
- 支持事务,占用磁盘空间大,支持多版本并发控制(MVVC)。锁机制有表锁/行锁。
- 要求事务,写频繁的操作。
- 崩溃修复能力。
MySQL 索引背后的数据结构及算法原理
MySQL索引
https://github.com/Snailclimb/JavaGuide#mysql
https://juejin.im/post/5b55b842f265da0f9e589e79
https://github.com/CyC2018/CS-Notes/blob/master/notes/MySQL.md
来源:CSDN
作者:♂燃烧吧ˇ小宇宙、
链接:https://blog.csdn.net/qq_29453229/article/details/104697407