Open
Description
版本信息(Version)
3.2409.0
问题描述(Describe)
MySQL规则,联合索引,必须使用联合索引的首字段误报错
截图或日志(Log)
如何复现(To Reproduce)
- 存在如下DDL
CREATE TABLE `user_1`
(
`id` int NOT NULL AUTO_INCREMENT,
`name` INT NOT NULL,
`age` varchar(20) NOT NULL,
`desc` varchar(100) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `IDX_UID_CHANNEL` (`name`, `age`),
KEY `idx_PARTNER_UID_CHANNEL` (`desc`, `age`)
) ENGINE = InnoDB
AUTO_INCREMENT = 2
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_general_ci;
- 审核该条SQL
SELECT *
FROM user_1
WHERE name = 't'
AND age = 12;
- 复现
问题原因
表user_1存在两个联合索引,两个联合索引第二个字段都是 age 字段,联合索引最左不同,复现的SQL能满足IDX_UID_CHANNEL索引,但是不满足idx_PARTNER_UID_CHANNEL联合索引
UNIQUE KEY `IDX_UID_CHANNEL` (`name`, `age`),
KEY `idx_PARTNER_UID_CHANNEL` (`desc`, `age`)