MySQL 组合索引未生效跟查询的列有关系?
已知表中的列有A B C D E,其中A是主键,B,C是组合索引,请你分析下面的sql能不能用到组合索引:select * from Table where B=1 and C = 2我问了gpt,回答是可以但是我用explain分析sql,却没有走索引
分析的sql: EXPLAIN SELECT * FROM combine_indx WHERE c = 3 and b = 4
b 和 c的顺序不重要,因为sql优化器会自动优化为什么组合索引没有生效? 是因为select * 查询所有列导致的吗?我修改为select b,c 索引就会生效
建表sqlSET 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;

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

- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容