-
对于经常出现在where后面或者on后面的字段,我们要加索引
-
频繁更新的字段不要加索引,因为这个有维护索引的代价
-
区分度太低的字段不适合建索引,比如性别,总共就三种(男、女、未知),区分度太小
我曾经遇到过这个问题,我有一次对博客项目中文章标签建立索引,但是我用explain查看执行计划,发现并没有走
索引后来分析了一下问题原因就是因为文章标签区分度太小,因为我大部分文章都是关于后端的,当根据文章标签查询的
时候,MySQL优化器认为一次次查出文章id,然后再回表查询文章名称和简介,这里回表的代价,不如直接全表扫描。
解决方案:删掉这个索引 or 增加区分度,增加更多文章类型
- 尽量扩展索引
这个主要是为了索引覆盖,减少回表。
比如现在有根据name查询age的需求,如果只对name建立索引,流程就是根据name查询出主键id,然后去主键索引上
根据主键id查询出age信息,这个过程是需要回表的
如果对name索引扩展索引成联合索引name,age,那么一次查询就可以获得age信息,达成索引覆盖不需要回表