1、限制索引的数量
索引并不是越多越好,要根据查询有针对性的创建。虽然MySQL单个普通表上最多能建65个索引(64个二级索引 + 1个主键索引),但还是建议单张表索引数量不要超过6个,原因:
- 索引并不是越多越好,索引可以提高查询的效率,但会降低写数据的效率。有时不恰当的索引还会降低查询的效率。
- 每个索引都需要占用磁盘空间,索引越多,需要的磁盘空间就越大。
- 索引会影响INSERT、DELETE、UPDATE等语句的性能,因为表中的数据更改的同时,索引也会进行调整和更新,会造成负担。
- 优化器在选择如何优化查询时,会根据统一信息,对每一个可以用到的索引来进行评估,以生成出一个最好的执行计划,如果同时有很多个索引都可以用于查询,会增加MySQL优化器生成执行计划时间,降低查询性能。
2、不适合创建索引的情况
1、在wherw,GROUP BY 或 ORDER BY中使用不到字段,不要设置索引
2、数据量小的表最好不要使用索引
3、禁止给表中的每一列都建立单独的索引
4、有大量重复的列上不要建索引
5、不要对经常更新的表和频繁更新的字段创建索引
6、不建议用无序值作为索引
- 例如身份证、UUID、MD5、HASH、无序厂字符串等。
7、删除不再使用或者很少使用的索引
8、不要定义冗余或重复的索引
-
重复:primary key(id),index(id),unique index(id)
-
冗余:index(a,b,c),index(a,b),index(a),
-
重复的和冗余的索引会降低查询效率,因为MySQL查询优化器会不知道该使用哪个索引。