【MySQL】索引类型

阅读更多

MySQL支持多种类型的索引。在使用时可以根据业务需求选择合适的索引类型。

 

普通索引

就是没有特殊限制的索引。
示例:

create index 'index_name_1' on table1 (column1);

 

唯一索引

唯一索引所使用的列(Column)值必须唯一,可以是空值,而且是允许多个空值
如果索引引用了多列,则其组合的列值必须唯一。
示例:

create unique index 'index_name_1' on table1 (column1);

 

主键索引

一种特殊的唯一索引,不允许列值为空值。通常在创建表时就创建主键索引。
示例:

create table table1 (
  id int not null,
  ...
  primary key (id)
);

 

 

多列索引

也叫组合索引。就是指索引由多个列组成。
示例:

create index 'index_name_1' on table1 (column1, column2, column3);

 

多列索引的使用遵循 最左前缀 原则。即,靠左边的索引会被优先使用。

在创建组合索引时,应将使用最频繁的列放在前面,以提高搜索效率。

上述示例相当于创建了三个索引:column1 的单列索引、(column1, column2) 的组合索引、(column1, column2, column3) 的组合索引。

如果未指定column1,那么这些索引都不会被使用。

where 子句中各这些列无需按照此顺序排布,MySQL会自动检测调整。

 

空间索引(Spatial Index)

用于对 geometry 之类表示空间位置类型字段的索引。

 

全文索引(Fulltext Index)

用于对大数据量的文本字段进行索引,搜索那些包含目标文本的记录。非常耗时,耗存储空间。
示例:

create spatial index index_1 on table1 (column_g);

 

索引使用注意事项

可以使用 MySQL 的 Explain 表达式查看SQL查询语句的效率。

示例:

explain select * from table1 where column1 like 'a%';

 

以下情况不会使用索引:

  • like 值中以 % 开头

    不使用索引:like '%abc'
    使用索引:like 'abc%'

  • 使用了 函数 或 表达式

    不使用索引:left(column1, 3) = 'abc'

  • !=、or 、not in、not like 这些关键字不会使用索引
  • MySQL查询只使用一次个索引,如果where子句使用了索引,后续的order by不会使用索引

 

你可能感兴趣的:(【MySQL】索引类型)