索引是一个单独的、存储在磁盘上的数据库结构,它们包含着对数据表里所有记录的引用指针。
索引是在存储引擎中实现的,因此,每种存储引擎的索引都不一定完全相同,并且每种存储引擎也不一定支持所有的索引类型。MySQL中索引的存储类型有两种:BTREE和HASH,具体和表的存储引擎相关;MyISAM和InnoDB只支持BTREE索引;MEMORY和HEAP可以支持HASH、BTREE索引。
索引的分类
普通索引和唯一索引
单列索引和组合索引
单列索引:一个索引只包含单个列,一个表可以有多个单列索引;
组合使用:多个字段上创建的索引。使用组合索引时遵循最左前缀集合。
- 全文索引:FULLTEXT
MySQL只有MyISAM存储引擎支持全文索引;
- 空间索引
创建索引
建表时创建
普通索引
create table book (
id int not null,
name varchar(255) not null,
author varchar(255) not null,
year_publish year not null,
index yearPublishIdx (year_publish)
);
唯一索引
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 <表名>;