已知表中的列有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 索引就会生效
建表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;
因为select *要回表,所以explain的type是all