本文是关于mysql数据库索引,那么对于索引我们到底要学些什么呢?先来搞清楚以下几点:
- 何为索引
- 索引共有几种类型
- 怎样创建索引
- 索引设计有哪些基本原则
先建一张user表,结构如下:
何为索引
索引(在 MySQL 中也叫“键key”)是存储引擎快速找到记录的一种数据结构
——《高性能MySQL》
索引的本质其实就是一种数据结构,其功能是帮助我们快速匹配查找到我们需要的数据,同事也是数据库性能优化最常用的工具之一。
类似于字典,大家都知道使用字典查找你们想要的字的内容时,你只要知道这个字大发音或者能写出这个字,那么你就能很快查到该字的内容。
索引几大类型
使用SHOW INDEX FROM 表名称;
查看索引详情
show index from user;
- 主键 PRIMARY KEY
主键就是一种索引,并且是一种特殊的、唯一的、不允许有空值的所以。一般是在数据库表创建的时候创建。另外说明:同一张表里有且只能拥有一个主键。 - 唯一索引 UNIQUE
唯一索引列说明该列中不能有重复的,但允许有空值。如果是组合索引,则列值的组合必须唯一。
可以通过ALTER TABLE 表名称 ADD UNIQUE (列名称);
创建唯一索引
- 可以通过
ALTER TABLE 表名称 ADD UNIQUE (列A,列B);
创建唯一组合索引
- 普通索引 INDEX
最基本的索引,它没有任何限制。可以通过ALTER TABLE 表名称 ADD INDEX 索引名称(列名);
创建普通索引
- 组合索引 INDEX
组合索引,即一个索引包含多个列。多用于避免回表查询。可以通过ALTER TABLE 表名称ADD INDEX 索引名称(列A, 列B, 列C);
创建组合索引
- 全文索引 FULLTEXT
全文索引(也称全文检索)是目前搜索引擎使用的一种关键技术。
可以通过ALTER TABLE 表名称ADD FULLTEXT (列);
创建全文索引
索引一经创建不能修改,如果要修改索引,只能删除重建。可以使用DROP INDEX 索引名称 ON 表名称;
删除索引。
索引设计的原则
- 适合索引的列是出现在where子句中的列,或者连接子句中指定的列
- 基数较小的类,索引效果较差,没有必要在此列建立索引
- 使用短索引,如果对长字符串列进行索引,应该指定一个前缀长度,这样能够节省大量索引空间
- 不要过度索引。索引需要额外的磁盘空间,并降低写操作的性能。在修改表内容的时候,索引会进行更新甚至重构,索引列越多,这个时间就会越长。所以只保持需要的索引有利于查询即可。