2011-07-14 18 views
14

¿Cuál es la manera de contar más eficientemente el número total de filas en una tabla grande? Tengo una tabla con 23 millones de filas y la siguiente consulta tarda más de 30 segundos en la producción de hardware:MySQL: ¿Cómo contar eficazmente el número de filas en una tabla grande?

select count(*) from tablename; 

Parece que MySQL debe estar haciendo un recorrido de tabla, pero no parece como esto debería ser necesario.

+0

¿Tiene una clave principal? ¿Qué índices hay en la mesa? –

+0

@Jacob, ¿Realmente importa? El InnoDb tendrá que contar 23mi PK o índices si existen. – Tocco

+0

Probablemente está haciendo un escaneo de índice, pero aún será lento. –

Respuesta

3

El recuento de filas de una tabla es lento en InnoDB.

MyISAM por otro lado tiene el recuento de filas como una propiedad de la tabla, lo que hace que su consulta sea realmente rápida en MyISAM.

+0

+1 para MyISAM, a veces InnoDB simplemente no lo corta: P –

+1

Ese es el precio que paga por el cumplimiento de ACID en InnoDB. – Mchl

14

Si una aproximación es suficiente, se puede utilizar:

show table status like 'tablename' 
+0

DESDE, no me gusta :) – Karolis

+2

@Karolis: no. es SHOW TABLE STATUS [FROM database] [LIKE 'pattern']. – wonk0

+0

@ wonk0 sí. tienes razón. – Karolis

0

Uso caché de consultas recuento SQL_CACHE SELECT (nombre_columna) de la tabla

+0

La caché de consultas está en desuso a partir de MySQL 5.7.20, y se elimina en MySQL 8.0. – DidThis

Cuestiones relacionadas