Mysql建索引注意事项
- 单值索引,尽量选择过滤性更好的字段,例如:性别字段,过滤度为50%,识别率很差,不建议建索引
- 组合索引,索引字段的顺序可以按照识别度进行排序,识别度越高,放在越靠前
- 组合索引,尽量包含where语句中的更多字段
- 尽可能的根据分析执行计划、统计信息,去调整query的写法达到合适索引的目的索引容易失效的几个注意点(a)不在索引列上做任何的操作(计算、函数、类型转换),会导致索引失效而转向全表扫描 (b)组合索引中,如果中间某个字段使用了范围条件,则右边的列索引失效 ©尽量使用覆盖索引(索引列和查询列一致),减少使用select * ( d)mysql在使用不等于(!= 或者<>)的时候,无法使用索引列会导致全表扫描
- is null ,is not null 也无法使用索引
- like通配符必须放在索引列的右边,否则索引失效,编程全表扫描
- 字符串不加单引号索引失效
- 少用or,用它连接索引会失效
- where 中查询条件使用到的列保持与order by 中使用列是在同一索引中;避免文件排序;
- 查询数据是否存在时,不要用count函数,可以用单个字段代替,如ID;避免继续扫描表或者索引
- 查询数量是否超过指定阈值时,只需查询比阈值+1的条数即可;避免继续扫描表或者索引
- 各数据类型要求的存储长度如下:
详情请查阅官方文档:https://dev.mysql.com/doc/refman/5.7/en/storage-requirements.html#data-types-storage-reqs-innodb