什么是索引
索引在mysql中也叫键(key)是存储引擎快速找到记录的一种数据结构
其作用相当于超市里的导购员,书本里的目录。
可以通过 show index from 表名; 的方式查看索引详情
1.主键索引 primary key
它是一种特殊的唯一索引,不允许有空值,一般是在建表的时候同时创建主键索引。
注:一个表只能有一个主键索引。
2.唯一索引 unique
唯一索引的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。
可以通过 alter table 表名 add unique(列名); 创建唯一索引
3.普通索引 index
最基本的索引,它没有任何限制。
可以通过 alter table 表名 add index 索引名 (列名); 创建普通索引
4.组合索引 index
一个索引包含多个列,多用于避免回表查询
可以通过 alter table 表名 add index 索引名(列名,列名,列名); 创建组合索引
5.全文索引 fulltext
全文索引(全文检索)是目前搜索引擎的一种关键技术。
可以通过alter table 表名 add fulltext (列名); 创建全文索引
修改索引
索引一旦创建就不能修改,可以通过删除重建的方式,删除索引:drop index 索引名 on 表名;
索引创建原则
- 比较频繁的作为查询条件但更新较少的字段应该考虑创建索引。
- 数据量太小的表不应该创建索引。
- 重复值比较多的字段不应该创建索引,例如:性别,状态等。
- 创建索引的字段应该设置为not null或设置默认值,存在null值可能会得到“不符合预期”的结果。
- 大数据类型的字段尽量不要创建索引,或者根据需要指定一个前缀长度创建索引,这样可以大量节省索引空间,提升查询效率。
- mysql索引遵循最左前缀匹配原则,因此创建复合索引时字段的顺序应该根据字段的查询频度从左到右排列,目的是提高索引的使用率,在满足需要的情况下尽量减少索引数量,查询频度差不多的情况下,区分度高的优先。
- 对业务上具有唯一特性的字段创建索引的话,应该建成唯一索引。虽然唯一索引会影响insert速度,但是对于查询的速度提升是非常明显的,而且还能很好的保证数据的唯一性,避免脏数据产生。
- 多表关联时,要保证关联字段上有索引。