区别核心:联合索引可加速多个字段组合查询,单列索引只能加速一个字段。
🔹联合索引(复合索引)
INDEX(col1, col2, col3)
-
适用范围:
-
WHERE col1 = ...
✅ -
WHERE col1 = ... AND col2 = ...
✅ -
WHERE col1 = ... AND col2 = ... AND col3 = ...
✅ -
WHERE col2 = ...
❌ 不命中(跳过前缀) -
WHERE col1 = ... AND col3 = ...
❌ 也不命中
-
-
优势:
-
一次命中多个字段,节省多次回表。
-
如果查询字段包含索引中所有字段(覆盖索引),可避免回表。
-
🔹单列索引
分别建:
INDEX(col1)
INDEX(col2)
INDEX(col3)
-
适用范围:
-
WHERE col1 = ...
✅ -
WHERE col2 = ...
✅ -
WHERE col1 = ... AND col2 = ...
→ 需要 MySQL 多索引合并,效率不如联合索引。
-
✅总结:
区别 | 联合索引 | 单列索引 |
---|---|---|
优化多字段查询 | ✅ 高效,顺序影响生效 | ❌ 弱,依赖合并算法 |
顺序要求 | ✅ 有严格的最左匹配原则 | ❌ 无顺序要求 |
存储空间 | 占空间更少 | 多个索引重复记录更多 |
回表次数 | ✅ 可减少回表(覆盖索引) | ❌ 查询字段多时需回表多次 |
结论:
-
多字段常组合查询 → 联合索引
-
单字段经常独立查询 → 单列索引
-
查询中字段顺序固定 → 联合索引优先
-
字段组合不定 → 分别建单列索引(必要时)