- 考虑建立索引的情况:数据量庞大,查询吃力、经常通过该字段进行检索、该字段很少进行 DML 操作
- 索引虽然可以提高查询效率,但在 DML 的同时需要更新索引,所以每个索引的建立都要慎重考虑,过多不必要的索引在经常 DML 的表中反而会降低整体效率;索引需要占用一定的空间,当磁盘空间有限时更要慎重考虑索引的建立
- 建议通过主键索引检索,或通过 unique 约束字段索引检索
- 唯一性较弱的字段上添加索引的用处不大,有时甚至会降低查询效率。因为唯一性较弱的字段每次都会检索到很多满足条件的关键字,产生过多的回表操作,耗费的时间甚至多过全表遍历
索引失效的情况
- 模糊搜索并且以 % 开始,此时我们没办法确认顺序
- 使用 or 时两边字段没有全部建立索引。没有索引的字段不管怎样都需要全表扫描,所以 mysql 忽略掉有索引的字段并进行一次全表扫描
- 添加索引的字段参与了运算或使用了函数