1. 在where中使用不到的字段,不要设置索引
- WHERE条件(包括order by ,group by)
2. 数据量小的表最好不要使用索引
- 表记录太少,比如少于1000个,创建索引会先查索引,再回表,查询花费的时间可能比不创建索引还要高。
3. 有大量重复数据的列上不要建立索引
4. 避免对经常更新的表创建过多的索引
- 频繁更新的字段不一定要创建索引,更新数据时,索引也会更新,影响性能
- 避免对经常更新的表创建过多的索引,并且索引中的列尽可能少。
5. 不建议用无序的值作为索引
例如身份证、UUID(在索引比较时需要转为ASCII,并且插入时可能造成页分裂)、MD5、HASH、无序长字符串等。
- Alibaba规范:身份证必须设置为唯一索引
6. 删除不再使用或者很少使用的索引
- 表中的数据被大量更新,或者数据的使用方式被改变后,原有的一些索引可能不再需要。
- 数据库管理员应当定期找出这些索引,将他们删除,从而减少索引对更新操作的影响。
7. 不要定义冗余或重复的索引
冗余场景,如:
联合索引中,name列作为最左列,当where条件中单独使用name时,会快速从联合索引中快速搜索。
重复场景,如: