MySQL 索引入门

定义

官方定义:是帮助 MySQL 高效获取数据的数据结构,排好序的快速查找数据结构

分类

按功能逻辑

  1. 单值索引:一个索引包含单个列,一个表可以有多个单列索引。
  2. 唯一索引:索引列的值必须唯一,但允许有空值。
  3. 主键索引:设定为主键后数据库会自动建立的索引。
  4. 复合索引:一个索引包含多个列。

按数据存储方式

聚集索引

聚集索引指表中数据行按索引的排序方式进行存储,对查找行很有效。只有当表包含聚集索引时,表内的数据行才会按找索引列的值在磁盘上进行物理排序和存储。每一个表只能有一个聚集索引,因为数据行本身只能按一个顺序存储(InnoDB 的主键索引)。
MySQL 索引入门_第1张图片

非聚集索引(二级索引)

在数据库系统会有单独的存储空间存放非聚集索引,这些索引项是按照顺序存储的,但索引项指向的内容是随机存储的。也就是说系统会进行两次查找,第一次先找到索引,第二次找到索引对应的位置取出数据行。非聚集索引不会把索引指向的内容像聚集索引一样直接放到索引的后面,而是维护单独的索引表(只维护索引,不维护索引指向的数据),为数据检索提供方便(MyISAM 索引和 InnoDB 的非主键索引)。
MySQL 索引入门_第2张图片

二者对比

  1. 聚集索引的叶子节点存储的就是我们的数据记录,非聚集索引的叶子节点存储的是数据位置。非聚集索引不会影响数据表的物理存储顺序。
  2. 一个表只能有一个聚集索引,因为只能有一种排序存储的方式,但可以有多个非聚集索引,也就是多个索引目录提供数据检索。
  3. 使用聚集索引的时候,数据的查询效率高,但如果对数据进行插入,删除,更新等操作,效率会比非聚集索引低。

按结构分

这里就不再详述,涉及到数据结构内容:B 树索引、B+ 树索引、全文索引、Hash 索引等。

优点

详细请参考《高性能 MySQL 第三版》第五章第二节。

  1. 大大减少服务器需要扫描的数据量;
  2. 索引可以帮助服务器避免排序和临时表;
  3. 索引可以将随机I/O变为顺序I/O。

关联阅读

  • 《MySQL 查询优化》请期待~

你可能感兴趣的:(编程菜鸟养成记,#,SQL,与,NoSQL,mysql,索引)