目录
一、MySQL 索引介绍
1、索引的定义
MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。
说白了,索引的本质就是一种特殊的数据结构。索引的目的在于提高查询效率,就好像我们平常使用的字典一样。我们可以简单理解为索引是排好序的快速查找的数据结构:
2、索引与数据表的联系
我们平常所说的 MySQL 索引,如果没有特别指明,都是指B+树结构组织的索引。当然,除了B+树这种类型的索引之外,还有哈稀索引(hash index)等。
索引的节点存在一个指针,记录对应的数据行所在的物理地址,如图所示:
左边是数据表,Col1 是数据记录的物理地址,Col2 是记录的数据,为了加快 Col2 的查找,右边索引(B+树)的每个节点分别包含索引键值和一个指向对应数据记录物理地址的指针,这样就可以通过索引快速获取到相应数据,从而实现快速检索的目的。
一般来说索引本身也很大,不可能全部存储在内存中,因此索引往往以索引文件的形式存储的磁盘上。
3、索引的优缺点
优点
- 极大地提高数据检索的效率,降低数据库的 IO 成本;
- 通过索引列对数据进行排序,降低数据排序的成本,降低了CPU的消耗;
缺点
- 由于索引实际上也是一张表,该表保存了主键与索引字段,并指向实体表的记录,所以索引列也是要占用空间的;
- 虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行
INSERT、UPDATE、DELETE
操作。因为更新表时,MySQL 不仅要保存数据,还要保存一下索引文件每次更新添加了索引列的字段,都会调整因为更新所带来的键值变化后的索引信息; - 索引只是提高效率的一个因素,如果你的 MySQL 有大数据量的表,就需要花时间研究建立最优秀的索引,或优化查询语句;
3、MySQL索引分类
MySQL 的索引种类主要有以下几种:
- 单值索引