第 68.1 节:构建复合索引
在许多情况下,复合索引比单列索引性能更好。要构建最优的复合索引,请按以下顺序填充列:
- 首先放
WHERE子句中的等值条件列(例如INDEX(a,b,...)用于WHERE a=12 AND b='xyz' ...) IN列——优化器可能能够跳过索引中的某些部分。- 一个“范围”条件列(例如
x BETWEEN 3 AND 9、name LIKE 'J%')。注意:索引在遇到第一个范围列后,后面的列将不会被使用。 GROUP BY中的所有列,按顺序。ORDER BY中的所有列,按顺序。只有在所有列都是升序(ASC)或都是降序(DESC),或者你使用的是 MySQL 8.0 时才有效。
注意和例外:
- 不要重复列。
- 跳过不适用的任何情况。
- 如果没用完
WHERE中的所有列,就没有必要继续到GROUP BY等。 - 存在某些情况下,仅索引
ORDER BY列(忽略WHERE)是有用的。 - 不要将列“隐藏”在函数中(例如
DATE(x) = ...不能使用x上的索引)。 - “前缀索引”(例如
text_col(99))不太可能有帮助,甚至可能有害。
更多详细信息和提示。