Jak zoptymalizować wydajność COUNT (*) na InnoDB, używając indeksu

Mam dużą, ale wąską tabelę InnoDB z ~ 9m rekordami. Robićcount(*) lubcount(id) na stole jest bardzo powolny (6+ sekund):

DROP TABLE IF EXISTS `perf2`;

CREATE TABLE `perf2` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `channel_id` int(11) DEFAULT NULL,
  `timestamp` bigint(20) NOT NULL,
  `value` double NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `ts_uniq` (`channel_id`,`timestamp`),
  KEY `IDX_CHANNEL_ID` (`channel_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

RESET QUERY CACHE;
SELECT COUNT(*) FROM perf2;

Chociaż instrukcja nie jest uruchamiana zbyt często, dobrze byłoby ją zoptymalizować. Wedłughttp://www.cloudspace.com/blog/2009/08/06/fast-mysql-innodb-count-really-fast/ powinno to być możliwe, zmuszając InnoDB do używania indeksu:

SELECT COUNT(id) FROM perf2 USE INDEX (PRIMARY);

Plan wyjaśniania wydaje się w porządku:

id  select_type table   type    possible_keys   key     key_len ref     rows    Extra
1   SIMPLE      perf2   index   NULL            PRIMARY 4       NULL    8906459 Using index

Niestety oświadczenie jest tak powolne jak wcześniej. Według„SELECT COUNT (*)” jest powolny, nawet z klauzulą ​​where Próbowałem również zoptymalizować tabelę bez powodzenia.

Jaki / jest / jest sposób na optymalizacjęCOUNT(*) wydajność na InnoDB?

questionAnswers(4)

yourAnswerToTheQuestion