Cómo optimizar el rendimiento de COUNT (*) en InnoDB utilizando el índice
Tengo una tabla InnoDB grande pero estrecha con ~ 9m registros. Obracount(*)
ocount(id)
En la mesa es extremadamente lento (6+ segundos):
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;
Si bien la declaración no se ejecuta con demasiada frecuencia, sería bueno optimizarla. De acuerdo ahttp://www.cloudspace.com/blog/2009/08/06/fast-mysql-innodb-count-really-fast/ esto debería ser posible forzando a InnoDB a usar un índice:
SELECT COUNT(id) FROM perf2 USE INDEX (PRIMARY);
El plan de explicación parece estar bien:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE perf2 index NULL PRIMARY 4 NULL 8906459 Using index
Desafortunadamente la afirmación es tan lenta como antes. De acuerdo a"SELECT COUNT (*)" es lento, incluso con la cláusula where También he intentado optimizar la tabla sin éxito.
¿Cuál es la forma de optimizar?COUNT(*)
rendimiento en InnoDB?