Рассмотрим следующую таблицу 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
должен иметь 2 уникальные записи на своем первом уровне with
и 3 (РЕДАКТИРОВАТЬ: 4) уникальных записи в what
"субиндексе". Но MySQL сообщает о 4 уникальных записях для каждого уровня. Другими словами, количество уникальных элементов для каждого уровня всегда равно количеству строк в таблице log
.
РЕДАКТИРОВАТЬ: «Второй уровень» может иметь количество уникальных записей, равное общему количеству записей, но не подходит для верхнего уровня.
EDIT2: Заметили, что если число битов, занятых столбцом with
, изменилось, например, на int (11) и обратно на int (10), то кардинальность начнет работать как положено. Даже EXPLAIN SELECT COUNT(DISTINCT 'with') FROM log
отображает адекватное значение для rows
.
Это ошибка, особенность или мое недоразумение?