MySQL 索引

1. 索引分类

1.1. 普通索引

index:加速查找

1.2. 唯一索引

主键索引:primary key :加速查找+约束(不为空且唯一)

唯一索引:unique:加速查找+约束 (唯一)

1.3. 联合索引

primary key(id,name):联合主键索引

unique(id,name):联合唯一索引

index(id,name):联合普通索引

1.4. 全文索引

fulltext :用于搜索很长一篇文章的时候,效果最好。

1.5. 空间索引

hash类型的索引:查询单条快,范围查询慢

btree类型的索引:b+树,层数越多,数据量指数级增长(我们就用它,因为innodb默认支持它)

不同的存储引擎支持的索引类型也不同

InnoDB 支持事务,支持行级别锁定,支持 B-tree、Full-text 等索引,不支持 Hash 索引;

MyISAM 不支持事务,支持表级别锁定,支持 B-tree、Full-text 等索引,不支持 Hash 索引;

Memory 不支持事务,支持表级别锁定,支持 B-tree、Hash 等索引,不支持 Full-text 索引;

NDB 支持事务,支持行级别锁定,支持 Hash 索引,不支持 B-tree、Full-text 等索引;

Archive 不支持事务,支持表级别锁定,不支持 B-tree、Hash、Full-text 等索引;

2. 索引操作

2.1. 创建索引

  • 创建表时

CREATE TABLE 表名 (
  字段名1  数据类型 [完整性约束条件…],
  字段名2  数据类型 [完整性约束条件…],
 	[UNIQUE | FULLTEXT | SPATIAL ]   INDEX | KEY
 	[索引名]  (字段名[(长度)]  [ASC |DESC]) 
 	);
  • create在已存在的表上

CREATE  [UNIQUE | FULLTEXT | SPATIAL ]  INDEX  索引名 
ON 表名 (字段名[(长度)]  [ASC |DESC]) ;
  • alter table 在已存在的表上

ALTER TABLE 表名 ADD  [UNIQUE | FULLTEXT | SPATIAL ] INDEX
索引名 (字段名[(长度)]  [ASC |DESC]) ;

2.2. 删除索引

DROP INDEX 索引名 ON 表名字;