温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

联合索引遵循什么原则

发布时间:2026-11-01 21:12:05 来源:亿速云 阅读:87 作者:小樊 栏目:数据库

在数据库(如 MySQL 等关系型数据库)中,**联合索引(复合索引)**的创建和使用通常遵循以下几个重要原则:


1. 最左前缀原则(Leftmost Prefix Principle)

这是联合索引最核心的原则。

  • 联合索引 (a, b, c) 相当于建立了:
    • (a)
    • (a, b)
    • (a, b, c)
  • 查询时必须从最左列开始使用,否则索引失效。
  • ✅ 可用索引:
    WHERE a = 1
    WHERE a = 1 AND b = 2
    WHERE a = 1 AND b = 2 AND c = 3
    
  • ❌ 无法使用索引:
    WHERE b = 2
    WHERE c = 3
    WHERE b = 2 AND c = 3
    

2. 选择性高的列放在前面(高区分度优先)

  • 选择性 = 不同值数量 / 总行数
  • 区分度越高,过滤效果越好,越应该放在联合索引前面。
  • 例如:
    • user_id(高选择性)
    • status(低选择性)
  • ✅ 推荐:(user_id, status)
  • ❌ 不推荐:(status, user_id)

3. 频繁查询条件优先

  • 经常出现在 WHERE、JOIN、ORDER BY 中的列应优先考虑放入联合索引。
  • 如果某列几乎不用于查询,不应放入索引,避免浪费空间和降低写入性能。

4. 覆盖索引原则(Covering Index)

  • 如果查询的字段全部在联合索引中,无需回表,性能极高。
  • 例如索引 (a, b, c):
    SELECT a, b, c FROM t WHERE a = 1 AND b = 2;
    
    属于覆盖索引查询。

5. 排序与分组字段顺序匹配

  • ORDER BY 和 GROUP BY 使用联合索引时,顺序要与索引一致。
  • 索引 (a, b):
    ORDER BY a, b   ✅
    ORDER BY b      ❌
    ORDER BY a DESC, b ASC ❌(顺序不一致)
    

6. 范围查询后面的列失效

  • 如果某一列使用范围查询(>, <, BETWEEN),其后面的索引列无法使用。
  • 索引 (a, b, c):
    WHERE a = 1 AND b > 10 AND c = 3;
    
    • a 可用
    • b 可用(范围)
    • c 不可用

7. 避免冗余索引

  • 已有 (a, b),就不需要再建 (a)
  • 已有 (a, b, c),不需要 (a, b)

总结口诀

最左前缀不能忘,高选择性放前方;
查询频繁优先放,覆盖索引性能强;
范围之后索引断,冗余索引要避免。

如果你有具体业务场景或 SQL 示例,我可以帮你设计更合理的联合索引。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手