索引设计原则
建索引不是越多越好:按「表 → 字段 → 索引」三个层面取舍。
| # | 原则 | 说明 |
|---|---|---|
| 1 | 表:数据量大且查询频繁 | 针对数据量较大、且查询比较频繁的表建立索引 |
| 2 | 字段:高频出现在条件中 | 针对常作为查询条件(where)、排序(order by)、分组(group by)操作的字段建立索引 |
| 3 | 字段:区分度要高 | 尽量选择区分度高的列,尽量建唯一索引;区分度越高,索引效率越高 |
| 4 | 字段:长字符串用前缀索引 | 字符串类型且长度较长的字段,可针对字段特点建立前缀索引 |
| 5 | 索引:多用联合索引 | 尽量使用联合索引、减少单列索引;联合索引很多时候可以覆盖索引,节省存储空间、避免回表、提高查询效率 |
| 6 | 索引:控制数量 | 索引并非多多益善,索引越多维护索引结构的代价越大,会影响增删改的效率 |
| 7 | 字段:对非空列加 NOT NULL | 索引列不存储 NULL 时,建表时用 NOT NULL 约束它,优化器能更好地决定用哪个索引最有效 |