sea - peticiones mysql
cuenta lenta(*) en innoDB (2)
Eche un vistazo a este post en InnoDB, necesita hacer un escaneo completo de la tabla, mientras que en MyISAM es un índice de lectura.
Si utiliza una cláusula where
aunque cambie el patrón de ejecución para usar índices, entonces, en general, InnoDB será más lento que MyISAM en recuentos completos no restringidos, mientras que el rendimiento coincide en recuentos restringidos.
Tengo una tabla message_message
con 3000000 registros.
cuando realizo una consulta de conteo (*), es muy lento ...:
mysql> select count(*) from message_message
;
+ ---------- +
| cuenta (*) |
+ ---------- +
| 2819416 |
+ ---------- +
1 fila en el set (2 min 35.35 sec)
explícalo: mysql> explain select count(*) from message_message
;
| id | select_type | mesa | tipo | posibles_keys | clave | key_len | ref | filas | Extra |
| 1 | SIMPLE | message_message | índice | NULL | PRIMARIO | 4 | NULL | 2939870 | Usando índice |
1 fila en el set (0.02 seg)
¿qué ocurre?
Si desea contar la cantidad de registros, es mejor consultar toda la tabla y usar la propiedad num_rows del conjunto de resultados. Count(...)
generalmente se usa cuando desea tener consultas agregadas (en combinación con GROUP BY
).