一、适合建立索引的场景
1.字段值唯一的字段适合建索引(MySQL主键具有唯一性,会自动建立唯一性索引)
2.经常出现在where条件中的字段适合建索引
3.经常需要进行order by的字段适合建索引
4.经常进行group by的字段适合建索引
5.distinct的字段适合建索引(原因:加索引了,相同的数据会放在一块,去重更快)
6.多表join时,适合对on后面的连接条件字段建立索引
7.前缀like适合建立指定长度的索引(alert table user add index(address(10)),只对地址的前10位建立索引)
注意:阿里巴巴强制varchar类型的字段建立索引必须指定索引的长度
8.散列度高的字段适合建立索引
索引的几点说明
①使用最频繁的字段放在联合索引的左侧
②多个字段都需要建立索引的情况下,建立联合索引的性能要比单独为每个字段建立索引好
③索引不是越多越好:原因1:索引维护需要额外的开销;原因2:索引太多,数据库在尝试使用索引的时候选择使用哪个索引的时间也就越长
二、不适合建立索引的场景
1.在where中使用不到的字段不要建立索引
索引是帮助快速定位数据的,起不到定位数据的字段建立索引,对筛选数据没有任何帮助
2.数据量小的表不要建立索引
没有索引的情况下,查询花费的时间可能比遍历索引的时间还要短,建立索引可能起不到优化效果
3.有大量重复数据的列不要建立索引
不但起不到明显的查询性能,反而会严重减低数据更新速度
4.避免对经常更新的表建立太多索引
更新数据的时候,也需要更新索引,更新效率会下降