索引

目前大部分数据库系统及文件系统都采用B-Tree(B树)或其变种B+Tree(B+树)作为索引结构。红黑树等数据结构也可以用来实现索引,但B+Tree是数据库系统实现索引的首选数据结构。在MySQL中,索引属于存储引擎级别的概念,不同存储引擎对索引的实现方式是不同的。

✏️ 1、分类

🖋️ 1.1、实现方式

按照实现方式可分为B+Tree索引和hash索引。

MyISAMInnoDB存储引擎:只支持BTREE索引, 也就是说默认使用BTREE,不能够更换;MEMORY/HEAP存储引擎:支持HASHBTREE索引。

🖋️ 1.2、使用方式

🐹 1.2.1、单列索引

一个索引只包含单个列,但一个表中可以有多个单列索引。

  1. 普通索引:MySQL中基本索引类型,没有什么限制,允许在定义索引的列中插入重复值和空值,纯粹为了查询数据更快一点;

  2. 唯一索引:索引列中的值必须是唯一的,但是允许为空值;

  3. 主键索引:是一种特殊的唯一索引,不允许有空值。

🐹 1.2.2、组合索引

在表中的多个字段组合上创建的索引,只有在查询条件中使用了这些字段的左边字段时,索引才会被使用,使用组合索引时遵循最左前缀集合。

🐹 1.2.3、全文索引

MySQL 5.6中的InnoDB引擎已经开始支持全文索引了,在此之前只有在MyISAM引擎上才能使用,只能在CHAR,VARCHAR,TEXT类型字段上使用全文索引。全文索引,就是在一堆文字中,通过其中的某个关键字等,就能找到该字段所属的记录行。

🐹 1.2.4、空间索引

空间索引是对空间数据类型的字段建立的索引,MySQL中的空间数据类型有四种,GEOMETRYPOINTLINESTRINGPOLYGON。在创建空间索引时,使用SPATIAL关键字。要求,引擎为MyISAM,创建空间索引的列,必须将其声明为NOT NULL

🖋️ 1.3、存储方式

🐹 1.3.1、聚簇索引

叶节点包含了完整的数据记录。

🐹 1.3.2、非聚簇索引

叶节点的 data 域存放的是数据记录的地址。

Last updated