这是我参与「第三届青训营 -后端场」笔记创作活动的第一篇笔记
MySQL索引是一种用于快速查询和检索数据的数据结构。索引的建立对于MySQL的高效运行是很重要的,它可以大大提高MySQL的检索速度。
常见的索引结构有: B 树, B+树和 Hash。 索引其实就相当于目录,拿汉语字典的目录页(索引)打比方,我们在查字典的时候,如果没有目录,那我们就只能一页一页的去找我们需要查的那个字,速度很慢,但如果我们可以按拼音、笔画、偏旁部首等排序的目录(索引)就可以快速查找到需要的字。
索引的优缺点
优点:
- 使用索引可以大大加快数据的检索速度(大大减少检索的数据量), 这也是创建索引的最主要的原因。
- 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。
缺点:
- 创建索引和维护索引需要耗费许多时间。当对表中的数据进行增删改的时候,如果数据有索引,那么索引也需要动态的修改,会降低 SQL 执行效率。
- 索引需要使用物理文件存储,也会耗费一定空间。
需要注意的是,索引并不是一定可以提高查询性能的。
索引的数据结构
Hash表
哈希表是键值对的集合,通过键(key)即可快速取出对应的值(value),因此哈希表可以快速检索数据(接近 O(1))。 但是我们知道,MySQL没有使用Hash表作为其默认数据结构,原因有两点:
1.Hash 冲突问题 :可能存在多个不同的key最后得到的index相同的情况,一般通过红黑树来解决。
2.Hash 索引不支持顺序和范围查询: 假如我们要对表中的数据进行排序或者进行范围查询,Hash索引就不行了。
B树于与B+树
B树也称B-树,全称为 多路平衡查找树 ,B+树是B树的一种变体,其中B是Balance(平衡)的意思。这也是目前大部分数据库系统及文件系统所采用的的索引结构。
B+Tree的数据结构,它相对于B-Tree结构,所有的数据都存放在叶子节点上,且把叶子节点通过指针连接到一起,形成了一条数据链表,以加快相邻数据的检索效率。
索引类型
- 聚集索引:聚集索引即索引结构和数据一起存放的索引。
- 非聚集索引:非聚集索引即索引结构和数据分开存放的索引,如二级索引。