You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL cars表索引设置咨询:单列索引还是多组联合索引?

针对你的cars表索引方案建议

先明确你的核心查询模式:所有查询都包含active=1这个过滤条件,然后分别搭配model、year或brand的等值匹配。那咱们来拆解两种方案的优劣,帮你选最优的:

方案1:单独给active、model、year、brand建索引

  • 这种方案效率很低,而且浪费资源。比如你执行SELECT * FROM cars WHERE active=1 AND model='A3'时,数据库通常只能用到active或model其中一个单独索引(优化器很难同时利用两个单列索引),没法高效过滤出同时满足两个条件的记录。
  • 另外,四个单独索引会占用更多存储空间,每次插入、更新数据时,数据库都要更新这四个索引,维护成本更高。

方案2:建(active,model)、(active,year)、(active,brand)三组联合索引

  • 这才是完美适配你查询场景的方案!因为你的每个查询都是「active=1 + 另一列等值匹配」的模式,把active放在联合索引的最左侧,数据库可以先快速定位到所有active=1的行,然后直接在这个小范围的子集里匹配第二列的条件,查询效率拉满。
  • 举个实际例子:当你执行SELECT * FROM cars WHERE active=1 AND year=2017时,(active,year)联合索引会先过滤出active为1的所有记录,接着在这些记录里快速找到year=2017的条目——完全命中索引,哪怕你查的是SELECT *需要回表,经过索引过滤后的数据集已经很小了,开销几乎可以忽略。

额外小提示

  • 如果你偶尔会有只查active=1的需求(不带其他条件),那这三组联合索引里的任意一个都能满足,因为联合索引的前缀列是可以单独被利用的,所以不需要额外再建一个单独的active索引。
  • 记住联合索引的核心原则:把每次查询都必带的、过滤性强的列放在最前面,这里active是所有查询的基础条件,放在最左绝对是正确的选择。

内容的提问来源于stack exchange,提问作者KMatko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:39:27