返回

MySQL系列(二)— 索引的种类及区别

后端


了解索引前我们先来普及一些基本的概念。

索引是什么?

索引是数据表中的特殊字段,用于优化数据的检索速度。索引可以从多个字段进行选择,它可以是该字段唯一确定内容的一个字段,或者从多个字段中,共同确定唯一内容的组合。

这样通过索引,我们就可以快速的找到数据,而不必要扫描完全表。


索引的工作原理是?

当表中添加一个索引后,将建立一个索引文件,B-Tree是一个平衡搜索二叉树,索引文件与表中的数据文件都会生成 B-Tree 索引。

B-Tree 索引的本质就是叶子节点的连接,叶子节点都是链表,通过索引文件,直接找到叶子节点,再通过链表遍历叶子节点的记录,最终找到我们需要查询的记录。


索引的作用主要是提高数据的查询速度,索引对数据的添加、更新、删除都会造成影响,在添加索引时,我们要综合权衡对查询和增删改操作的影响。

InnoDB和MyISAM 索引区别

在不同的数据表中,索引的处理方式也不一样,主要以 InnoDB 和 MyISAM 举例。

  1. MyISAM

优点:

  • MyISAM 最大的优点是支持只保存表的索引文件,这样导致插入、更新和删除数据的时候无需重新构建索引。
  • 具有延时编译机制,对大数据表非常友好。
  • MyISAM 表查询速度快。

缺点:

  • 不支持事务和行级锁。
  • 不支持外键。
  • MyISAM 的高并发时,性能会下降。
  • 不支持 CHARSET 和 Unicode 字符编码。
  1. InnoDB

优点:

  • InnoDB 支持更高的并发事务处理,InnoDB 不仅支持行级锁,也支持事务,能够一致和完全实现了ACID。
  • InnoDB 支持外键,使数据表的关联更便捷。
  • InnoDB 默认使用 B-Tree 索引。
  • 支持 CHARSET 和 Unicode 字符编码。

缺点:

  • InnoDB 插入数据时,索引页可能分裂,导致整个表的结构发生变化,影响添加和更新数据的速度。
  • 与 MyISAM 相比较,InnoDB 的写性能相对比较慢。
  • 只支持行锁。
  • 表的锁粒度是行或者页(若没有定义索引,那么就锁表)。

好啦,今天简单的介绍到此结束,我们下次再见。


参考: