索引的几种类型: 常用b+树索引, 唯一索引, 不常用哈希索引, 全文索引,空间索引,前缀索引, 外键索引
种类泛指: 聚簇索引(默认主键索引, 无主键使用隐式字段), 非聚簇索引(二级索引), 如果二级索引不是覆盖索引, 会进行回表操作
1.选择合适的索引, 索引经常用于查询的条件作为索引
2.考虑联合索引, 可以更好地支持复合查询条件和聚合排序操作
3.考虑索引的顺序,最左匹配, mysql会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配 对于多列索引, 把常用的列放在前面
4.尽量选择数据量少、区分度高的列做索引, 如果数据量很大,尽量使用前缀索引
5.避免过多的索引和太大的索引, 增加维护成本, 导致性能降低, 需要考虑查询和写入的平衡性 , 定期维护索引
删除多余的索引, 尽量扩展索引
1.没有使用索引列,或者索引列进行了函数、表达式(计算,判断操作)、类型转换(数据类型不匹配)等操作。避免操作索引列
2.使用like查询时使用通配符开头,尽量避免like查询开头使用通配符
3.使用or连接多个条件, mysql只能选择一个条件进行索引匹配。尽量使用and连接多个条件
4.数据分布不均匀, 某些值的重合度很高, 会导致索引失效。 考虑复合索引或者调整数据分布
5.多表连接时未使用合适的索引,(关联列无索引,数据分布不均) 会导致索引失效。使用索引列关联
6.数据量过大, mysql仍有可能通过全表扫描以避免索引io开销,导致索引失效。考虑分区表