构建复合索引
在许多情况下,复合索引的性能优于具有单个列的索引。要构建最佳复合索引,请按此顺序使用列填充它。
- 首先从
WHERE
子句中提取=
列。 (例如,INDEX(a,b,...)
forWHERE a=12 AND b='xyz' ...
) IN
column(s); 优化器可能能够跨越索引。- 一个范围(例如
x BETWEEN 3 AND 9
,name LIKE 'J%'
)它不会使用超过第一个范围列的任何内容。 GROUP BY
中的所有列按顺序排列ORDER BY
中的所有列按顺序排列。只有当所有都是ASC
或者所有都是DESC
或者你使用 8.0 时才有效。
注释和例外:
- 不要复制任何列。
- 跳过任何不适用的案例。
- 如果你不使用
WHERE
的所有列,就没有必要继续使用GROUP BY
等。 - 有些情况下,仅对
ORDER BY
列进行索引是有用的,忽略了WHERE
。 - 不要隐藏函数中的列(例如,
DATE(x) = ...
不能在索引中使用x
。) - ‘前缀’索引(例如,
text_col(99)
)不太可能有用; 可能会受伤。
更多细节和提示 。