考虑以下 MySQL 表:
CREATE TABLE `log`
(
`what` enum('add', 'edit', 'remove') CHARACTER SET ascii COLLATE ascii_bin NOT NULL,
`with` int(10) unsigned NOT NULL,
KEY `with_what` (`with`,`what`)
) ENGINE=InnoDB;
INSERT INTO `log` (`what`, `with`) VALUES
('add', 1),
('edit', 1),
('add', 2),
('remove', 2);
据我了解,with_what
索引的第一with
级必须有 2 个唯一条目,“子索引”中必须有 3 个(编辑:4)唯一条目what
。但是 MySQL 为每个级别报告 4 个唯一条目。换句话说,每个级别的唯一元素数始终等于log
表中的行数。
编辑:“第二级”的唯一条目数等于记录总数是可以的,但对于顶级则不行。
EDIT2:已经注意到如果列占用的位数with
发生变化,例如到 int(11) 并返回到 int(10),那么基数开始按预期工作。甚至EXPLAIN SELECT COUNT(DISTINCT 'with') FROM log
显示足够的价值rows
。
这是一个错误,一个功能还是我的误解?