索引是一个单独的、存储在磁盘上的数据库结构,它们包含着对数据表里所有记录的引用指针。

索引是在存储引擎中实现的,因此,每种存储引擎的索引都不一定完全相同,并且每种存储引擎也不一定支持所有的索引类型。MySQL中索引的存储类型有两种:BTREE和HASH,具体和表的存储引擎相关;MyISAM和InnoDB只支持BTREE索引;MEMORY和HEAP可以支持HASH、BTREE索引。

索引的分类

  1. 普通索引和唯一索引

  2. 单列索引和组合索引
    单列索引:一个索引只包含单个列,一个表可以有多个单列索引;

组合使用:多个字段上创建的索引。使用组合索引时遵循最左前缀集合。

  1. 全文索引:FULLTEXT

MySQL只有MyISAM存储引擎支持全文索引;

  1. 空间索引

创建索引

建表时创建

普通索引

  1. create table book (
  2. id int not null,
  3. name varchar(255) not null,
  4. author varchar(255) not null,
  5. year_publish year not null,
  6. index yearPublishIdx (year_publish)
  7. );

唯一索引

create table t1(
    id int not null,
    name char(30) not null,
    unique index idIdx (id)
);

单列索引

create table t2(
    id int not null,
    name char(30) not null,
    index  singleIdx (name(20))   -- 数字表示索引长度
);

组合索引

create table t3(
    id int not null,
    name char(30) not null,、
    age int not null,
    info varchar(255),
    index  multiIdx (id,name,age(100))   -- 数字表示索引长度
);

在已有表上创建

使用alter table

例子1:alter table book add index BkNameIdx (name(30))

show index:**用于查看表中的索引**

例子2:alter table book add unique index uniqueIdx (bookId);

使用create index

例子1: create index BkNameIdx on book (name);

例子2:create unique index uniqueIdx on book (bookId);


删除索引

使用 alter table

alter table <表名> drop index <索引名>;

使用drop index

drop index <索引名> on <表名>;