在数据库(如 MySQL 等关系型数据库)中,**联合索引(复合索引)**的创建和使用通常遵循以下几个重要原则:
这是联合索引最核心的原则。
(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
user_id(高选择性)status(低选择性)(user_id, status)(status, user_id)WHERE、JOIN、ORDER BY 中的列应优先考虑放入联合索引。(a, b, c):SELECT a, b, c FROM t WHERE a = 1 AND b = 2;
属于覆盖索引查询。ORDER BY 和 GROUP BY 使用联合索引时,顺序要与索引一致。(a, b):ORDER BY a, b ✅
ORDER BY b ❌
ORDER BY a DESC, b ASC ❌(顺序不一致)
>, <, BETWEEN),其后面的索引列无法使用。(a, b, c):WHERE a = 1 AND b > 10 AND c = 3;
a 可用b 可用(范围)c 不可用(a, b),就不需要再建 (a)(a, b, c),不需要 (a, b)最左前缀不能忘,高选择性放前方;
查询频繁优先放,覆盖索引性能强;
范围之后索引断,冗余索引要避免。
如果你有具体业务场景或 SQL 示例,我可以帮你设计更合理的联合索引。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。