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

作者站长头像
站长
· 阅读数 15

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

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;

回复
1个回答
avatar
test
2024-07-01

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

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