构建复合索引

在许多情况下,复合索引的性能优于具有单个列的索引。要构建最佳复合索引,请按此顺序使用列填充它。

  • 首先从 WHERE 子句中提取 = 列。 (例如,INDEX(a,b,...) for WHERE a=12 AND b='xyz' ...
  • IN column(s); 优化器可能能够跨越索引。
  • 一个范围(例如 x BETWEEN 3 AND 9name LIKE 'J%')它不会使用超过第一个范围列的任何内容。
  • GROUP BY 中的所有列按顺序排列
  • ORDER BY 中的所有列按顺序排列。只有当所有都是 ASC 或者所有都是 DESC 或者你使用 8.0 时才有效。

注释和例外:

  • 不要复制任何列。
  • 跳过任何不适用的案例。
  • 如果你不使用 WHERE 的所有列,就没有必要继续使用 GROUP BY 等。
  • 有些情况下,仅对 ORDER BY 列进行索引是有用的,忽略了 WHERE
  • 不要隐藏函数中的列(例如,DATE(x) = ... 不能在索引中使用 x。)
  • ‘前缀’索引(例如,text_col(99))不太可能有用; 可能会受伤。

更多细节和提示