MySQL 组合索引未生效跟查询的列有关系?

已知表中的列有A B C D E,其中A是主键,B,C是组合索引,请你分析下面的sql能不能用到组合索引:select * from Table where B=1 and C = 2
我问了gpt,回答是可以
image.png
但是我用explain分析sql,却没有走索引
image.png
分析的sql:
EXPLAIN SELECT * FROM combine_indx WHERE c = 3 and b = 4
image.png

b 和 c的顺序不重要,因为sql优化器会自动优化
为什么组合索引没有生效? 是因为select * 查询所有列导致的吗?
我修改为select b,c 索引就会生效

建表sql
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;


-- Table structure for combine_indx


DROP TABLE IF EXISTS combine_indx;
CREATE TABLE combine_indx (
a int(11) NOT NULL AUTO_INCREMENT,
b varchar(255) COLLATE utf8mb4_bin NOT NULL,
c varchar(255) COLLATE utf8mb4_bin NOT NULL,
d varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
e varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
PRIMARY KEY (a),
UNIQUE KEY index_u1 (b,c) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=3013 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

SET FOREIGN_KEY_CHECKS = 1;

阅读 2.4k
2 个回答

因为select *要回表,所以explain的type是all

select *是查所有,你select b, c
E`
XPLAIN SELECT * FROM combine_indx FORCE INDEX (index_u1) WHERE c = 3 and b = 4;

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题