Есть таблица:
CREATE TABLE `articles` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`content` text NOT NULL,
`url` text NOT NULL,
`status` enum('edit','order','place', 'user') DEFAULT 'edit',
PRIMARY KEY (`id`),
KEY `ix__status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
/*!50100 PARTITION BY RANGE (id)
(PARTITION articles_p1 VALUES LESS THAN (50000) ENGINE = InnoDB,
PARTITION articles_p2 VALUES LESS THAN (100000) ENGINE = InnoDB,
PARTITION articles_p3 VALUES LESS THAN (150000) ENGINE = InnoDB,
PARTITION articles_p4 VALUES LESS THAN (200000) ENGINE = InnoDB,
PARTITION articles_p5 VALUES LESS THAN (250000) ENGINE = InnoDB,
PARTITION articles_p6 VALUES LESS THAN (300000) ENGINE = InnoDB,
PARTITION articles_p7 VALUES LESS THAN (350000) ENGINE = InnoDB,
PARTITION articles_p8 VALUES LESS THAN (400000) ENGINE = InnoDB,
PARTITION articles_p9 VALUES LESS THAN (450000) ENGINE = InnoDB,
PARTITION articles_p10 VALUES LESS THAN (500000) ENGINE = InnoDB,
PARTITION articles_p11 VALUES LESS THAN MAXVALUE ENGINE = InnoDB) */
Таблица очень жирная, общий объем >10Gb. В ходе тестов тип поля url был заменен на varchar(8000). После этого запросы типа
SELECT COUNT(*) AS `count` FROM `articles` WHERE `status` NOT IN ('edit', 'order');
стали выполняться очень медленно (около 8 сек). План выполнения:
'1', 'SIMPLE', 'Article', 'index', 'status', 'status', '2', NULL, '1229613', 'Using where; Using index'
Но в этих статусах ('edit', 'order') менее 1% всех записей, т.е. индекс в данном случае не эффективен, но, если вернуть тип поля опять на TEXT время выполнения этого же запроса уменьшается до 0.5 секунды.
План выполнения при этом не меняется.
В чем причина такого поведения innodb?