重新看了一遍做得记录。
独立的列
索引列不能是表达式的一部分,也不能是函数的参数。在 where 语句里,始终将索引列单独放在比较符号的一侧。
前缀索引和索引的选择性
选择性是指不重复的索引值和数据表的记录总数的比值。
选择性越高查询效率越高,唯一索引的选择性是 1。
对于很长的索引列,判断它的前缀是否有足够的选择性。
MySQL 无法用前缀索引做 order by
和 group by
,也无法用前缀索引做覆盖扫描。
多列索引
MySQL 5.0 引入索引合并策略。索引合并使用的范围: OR 条件的联合,AND 条件的相交,组合前两种条件的组合和相交。
索引合并暗示着不良的设计,可以考虑组合索引。
索引列顺序
正确的顺序依赖于使用该索引的查询,并且同时需要考虑如何更好地满足排序和分组的需要。
将选择性高的列放在最前列,通常不如避免随机 I/O 和排序重要。
不需要考虑排序、分组时,应将选择性最高的列放在最前面。
性能不只是依赖于所有索引的列的选择性,也和查询条件的具体值有关,也就是和值的分布有关。