返回
MySQL系列(二)— 索引的种类及区别
后端
2023-11-02 10:10:56
了解索引前我们先来普及一些基本的概念。
索引是什么?
索引是数据表中的特殊字段,用于优化数据的检索速度。索引可以从多个字段进行选择,它可以是该字段唯一确定内容的一个字段,或者从多个字段中,共同确定唯一内容的组合。
这样通过索引,我们就可以快速的找到数据,而不必要扫描完全表。
索引的工作原理是?
当表中添加一个索引后,将建立一个索引文件,B-Tree是一个平衡搜索二叉树,索引文件与表中的数据文件都会生成 B-Tree 索引。
B-Tree 索引的本质就是叶子节点的连接,叶子节点都是链表,通过索引文件,直接找到叶子节点,再通过链表遍历叶子节点的记录,最终找到我们需要查询的记录。
索引的作用主要是提高数据的查询速度,索引对数据的添加、更新、删除都会造成影响,在添加索引时,我们要综合权衡对查询和增删改操作的影响。
InnoDB和MyISAM 索引区别
在不同的数据表中,索引的处理方式也不一样,主要以 InnoDB 和 MyISAM 举例。
- MyISAM
优点:
- MyISAM 最大的优点是支持只保存表的索引文件,这样导致插入、更新和删除数据的时候无需重新构建索引。
- 具有延时编译机制,对大数据表非常友好。
- MyISAM 表查询速度快。
缺点:
- 不支持事务和行级锁。
- 不支持外键。
- MyISAM 的高并发时,性能会下降。
- 不支持 CHARSET 和 Unicode 字符编码。
- InnoDB
优点:
- InnoDB 支持更高的并发事务处理,InnoDB 不仅支持行级锁,也支持事务,能够一致和完全实现了ACID。
- InnoDB 支持外键,使数据表的关联更便捷。
- InnoDB 默认使用 B-Tree 索引。
- 支持 CHARSET 和 Unicode 字符编码。
缺点:
- InnoDB 插入数据时,索引页可能分裂,导致整个表的结构发生变化,影响添加和更新数据的速度。
- 与 MyISAM 相比较,InnoDB 的写性能相对比较慢。
- 只支持行锁。
- 表的锁粒度是行或者页(若没有定义索引,那么就锁表)。
好啦,今天简单的介绍到此结束,我们下次再见。
参考:
- Mysql系列—索引的结构与原理
- https://tech.meituan.com/2017/11/06/mysql-index-2.html