接手了一个奇葩要求的新项目,说已有数据库结构的,要在此基础上去重新开发跟扩展,发现了这么一个表,建了 3 个看起来一样的索引,虽然我很难理解,但鉴于我 mysql 的知识水平有限,所以慎重起见来此劳烦大家解惑一下这样做的意义是什么?是有我考虑外的特殊作用吗?
CREATE TABLE `abc` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`type` VARCHAR(100) NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
`v0` VARCHAR(100) NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
`v1` VARCHAR(100) NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
`v2` VARCHAR(100) NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
`v3` VARCHAR(100) NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
`v4` VARCHAR(100) NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
`v5` VARCHAR(100) NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `idx_a_abc` (`type`, `v0`, `v1`, `v2`, `v3`, `v4`, `v5`) USING BTREE,
UNIQUE INDEX `idx_b_abc` (`type`, `v0`, `v1`, `v2`, `v3`, `v4`, `v5`) USING BTREE,
UNIQUE INDEX `idx_c` (`type`, `v0`, `v1`, `v2`, `v3`, `v4`, `v5`) USING BTREE
)
COLLATE='utf8mb4_general_ci'
ENGINE=InnoDB
ROW_FORMAT=DYNAMIC
;
CREATE TABLE `abc` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`type` VARCHAR(100) NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
`v0` VARCHAR(100) NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
`v1` VARCHAR(100) NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
`v2` VARCHAR(100) NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
`v3` VARCHAR(100) NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
`v4` VARCHAR(100) NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
`v5` VARCHAR(100) NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `idx_a_abc` (`type`, `v0`, `v1`, `v2`, `v3`, `v4`, `v5`) USING BTREE,
UNIQUE INDEX `idx_b_abc` (`type`, `v0`, `v1`, `v2`, `v3`, `v4`, `v5`) USING BTREE,
UNIQUE INDEX `idx_c` (`type`, `v0`, `v1`, `v2`, `v3`, `v4`, `v5`) USING BTREE
)
COLLATE='utf8mb4_general_ci'
ENGINE=InnoDB
ROW_FORMAT=DYNAMIC
;