构建复合索引
在许多情况下,复合索引的性能优于具有单个列的索引。要构建最佳复合索引,请按此顺序使用列填充它。
- 首先从
WHERE子句中提取=列。 (例如,INDEX(a,b,...)forWHERE a=12 AND b='xyz' ...) INcolumn(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))不太可能有用; 可能会受伤。
更多细节和提示 。