MySQL 索引类型:单列索引、全文索引、组合索引和空间索引

从逻辑的角度来对索引进行划分的话,可以分为单列索引全文索引组合索引空间索引。其中单列索引又可分为主键索引、唯一索引和普通索引。这里的逻辑可以理解为从 SQL 语句的角度,或者是从数据库关系表的角度。下面就简单介绍这些索引的作用和用法,以及在修改表的时候如何添加索引。

主键索引

即主索引,根据主键建立索引,不允许重复,不允许空值;

主键:数据库表中一列或列组合(字段)的值,可唯一标识表中的每一行。

加速查询 + 列值唯一(不可以有)+ 表中只有一个

ALTER TABLE 'table_name' ADD PRIMARY KEY pk_index('col');

唯一索引

用来建立索引的列的值必须是唯一的,允许空值。唯一索引不允许表中任何两行具有相同的索引值。比方说,在 employee 表中职员的姓 name 上创建了唯一索引,那么就表示任何两个员工都不能同姓。

加速查询 + 列值唯一(可以有)

ALTER TABLE 'table_name' ADD UNIQUE index_name('col');

普通索引

用表中的普通列构建的索引,没有任何限制。

仅加速查询

ALTER TABLE 'table_name' ADD INDEX index_name('col');

全文索引

用大文本对象的列构建的索引

ALTER TABLE 'table_name' ADD FULLTEXT INDEX ft_index('col');

组合索引

用多个列组合构建的索引,这多个列中的值不允许有空值。

多列值组成一个索引,专门用于组合搜索,其效率大于索引合并。

ALTER TABLE 'table_name' ADD INDEX index_name('col1','col2','col3');

在对多列组合建立索引时,会遵循「最左前缀」原则。

最左前缀原则:顾名思义,就是最左优先,上例中我们创建了 (col1, col2, col3) 多列索引,相当于创建了 (col1) 单列索引,(col1, col2) 组合索引以及 (col1, col2, col3) 组合索引。

所以当我们在创建多列索引时,要根据业务场景,将 where 子句中使用最频繁的一列放在最左边。

空间索引

对空间数据类型的字段建立的索引,底层可通过 R 树实现。只不过使用较少,了解即可。