一、索引分类

150 阅读3分钟

索引分类

索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。

索引一般可以分为四类

  • 单列索引:单列索引指的是只包含一列的索引,又可分为三种:

    • 普通索引:普通索引是最基本的索引类型,没有什么限制,且允许空值和重复值。
    • 唯一索引:唯一索引列中的值必须是唯一的,允许存在一个空值。多个空值仍然会视为重复
    • 主键索引:主键索引是特殊的唯一索引,不允许存在空值。
  • 组合索引:组合索引也就是多列索引,由多列组合创建的索引,使用的时候遵循最左前缀原则。

  • 全文索引5.7 以前全文索引只有 MyISAM 引擎支持,且只能在 CHAR,VARCHAR,TEXT 类型字段上使用全文索引,主要用于做文章的关键字搜索的。

  • 空间索引:空间索引是对空间数据类型的字段建立的索引。

主键索引

主键索引又被称为聚簇索引和聚集索引。

一张表中只能有一个主键索引,如果表中没有主键,就会选择第一个唯一字段作为主键索引。

如果没有主键和唯一字段,InnoDB存在一个隐藏列,rowID,会使用rowID字段作为索引。

在一张表中,主键索引树中,叶子节点存放的是完整的行数据。

唯一索引(二级索引)

一张表中可以存在多个。唯一索引是一个二级索引,二级索引树的叶子节点存储的是主键值。

唯一索引在成功创建后,该列便不能存在重复数据,如果有数据为空,也不能存在两个及以上的空数据。

在该列插入重复数据时候,便会报错;同时如果给已经存在的数据库创建唯一索引,如果该列已经存在重复数据,也会报错,需要删除重复数据后才能继续创建。

抛出的错误码是:1602

唯一索引的创建(SQL):

CREATE UNIQUE INDEX username_unique on users (username(50)); -- 创建唯一索引

ALTER TABLE users ADD UNIQUE INDEX username_unique (username(50)); -- 创建唯一索引

CREATE TABLE users(
  id int(11) NOT NULL,
  username VARCHAR(225),
  UNIQUE INDEX [username_index] (usename(50)) -- 在创建表的同时创建唯一索引
);

username(50) 表示只取该列的前五十个字符进行唯一判断,可以避免某些数据长度比较大的情况。这是一个前缀索引的概念。


普通索引(二级索引)

针对普通索引创建的索引,一张表中可以存在多个

联合索引

联合索引是多个字段组成的索引,需要遵循最左匹配原则。

最左匹配原则

建立的联合索引,需要从左到右依次匹配,如果中间没有字段,那么后续索引会直接失效。