¿Es más rápido cuando uso el nombre de la columna indexada en lugar de *? De esta manera: SELECCIONE tablename
1
Sólo ligeramente. Obtuve una tabla de filas 21961904 que su COUNT consultó en 115 segundos, mientras que usar la ID tomó 107 segundos.
Bondolin
2
COUNT (*) es una definición de lenguaje estricta. Obtendrá un error de análisis si intenta COUNT (*) tenga en cuenta el espacio
ppostma1
9
Puedes hacerlo COUNT(1), esta será la forma más rápida.
Shota Papiashvili
¿Cuál es la mejor manera de usar COUNT () para escribir una variable en PHP? ¿Hago "... COUNT (*) AS rowCount ..." en el SQL, ¿usa $ results-> num_rows, o hay una manera de llamar a este resultado directamente?
Nosajimiki
71
Porque nadie lo mencionó:
show table status;
enumera todas las tablas junto con información adicional, incluidas las filas estimadas para cada tabla. Esto es lo que phpMyAdmin está utilizando para su página de base de datos.
Esta información está disponible en MySQL 4, probablemente también en MySQL 3.23, base de datos de esquemas de información previa de mucho tiempo.
ACTUALIZAR:
Debido a que hubo un voto negativo, quiero aclarar que el número que se muestra se estima para InnoDB y TokuDB y es absolutamente correcto para los motores de almacenamiento MyISAM y Aria (Maria).
El número de filas. Algunos motores de almacenamiento, como MyISAM, almacenan el recuento exacto. Para otros motores de almacenamiento, como InnoDB, este valor es una aproximación y puede variar del valor real hasta en un 40% a 50%. En tales casos, use SELECT COUNT (*) para obtener un recuento preciso.
Esta también es la forma más rápida de ver el recuento de filas en MySQL, porque consultas como:
select count(*)fromtable;
Hacer un análisis completo de la tabla puede ser una operación muy costosa que puede llevar horas en un servidor grande de alta carga. También aumenta la E / S de disco.
La misma operación podría bloquear la tabla para inserciones y actualizaciones; esto ocurre solo en motores de almacenamiento exóticos.
InnoDB y TokuDB están bien con el bloqueo de la tabla, pero necesitan un escaneo completo de la tabla.
Esta parece ser la forma más eficiente de contar filas. Me pregunto por qué no es la respuesta. Estoy usando InnoDB. Con el bloqueo de la tabla, el número de filas debe ser exacto, ¿verdad?
Chung Lun Yuen
para innodb se estima . pero puede usarlo en algunos casos "Nuestro sitio web tiene miembros xxx", "Detectamos resultados xxx similares a los suyos", etc.
Nick
No estoy seguro. pero para Innodb no es real. Pero es bastante útil para millones de tablas de filas.
Nick
44
Ir a través de las tablas para contar cada fila para obtener un recuento de filas es bastante ridículo. Así que prefiero esta respuesta también.
th3penguinwhisperer
35
Tenemos otra forma de averiguar el número de filas en una tabla sin ejecutar una selectconsulta en esa tabla.
Cada instancia de MySQL tiene una base de datos information_schema. Si ejecuta la siguiente consulta, proporcionará detalles completos sobre la tabla, incluido el número aproximado de filas en esa tabla.
select*from information_schema.TABLES where table_name ='table_name'\G
Si tiene varios campos en su tabla y su tabla es enorme, es mejor NO UTILIZAR* porque carga todos los campos en la memoria y usar lo siguiente tendrá un mejor rendimiento
Esto puede devolver un número estimado de filas. En un ejemplo, obtuve 55,940,343 filas usando COUNT (*) pero 56,163,339 usando este método, por lo que fue desactivado en más de 200k.
jcoffland
@jcoffland, mencioné la respuesta de Santosh arriba que indica que el resultado es aproximado . Mi respuesta es una consulta práctica más detallada. Es bastante claro en todas las respuestas si desea un uso preciso del conteo count(*)con conocimiento del rendimiento
Mohammad Kanan
1
$sql="SELECT count(*) as toplam FROM wp_postmeta WHERE meta_key='ICERIK' AND post_id=".$id;$total =0;$sqls = mysql_query($sql,$conn);if($sqls ){$total = mysql_result($sqls,0);};
echo "Total:".$total;`
tablename
COUNT(1)
, esta será la forma más rápida.Porque nadie lo mencionó:
enumera todas las tablas junto con información adicional, incluidas las filas estimadas para cada tabla. Esto es lo que phpMyAdmin está utilizando para su página de base de datos.
Esta información está disponible en MySQL 4, probablemente también en MySQL 3.23, base de datos de esquemas de información previa de mucho tiempo.
ACTUALIZAR:
Debido a que hubo un voto negativo, quiero aclarar que el número que se muestra se estima para InnoDB y TokuDB y es absolutamente correcto para los motores de almacenamiento MyISAM y Aria (Maria).
Por la documentación :
Esta también es la forma más rápida de ver el recuento de filas en MySQL, porque consultas como:
Hacer un análisis completo de la tabla puede ser una operación muy costosa que puede llevar horas en un servidor grande de alta carga. También aumenta la E / S de disco.
La misma operación podría bloquear la tabla para inserciones y actualizaciones; esto ocurre solo en motores de almacenamiento exóticos.
InnoDB y TokuDB están bien con el bloqueo de la tabla, pero necesitan un escaneo completo de la tabla.
fuente
Tenemos otra forma de averiguar el número de filas en una tabla sin ejecutar una
select
consulta en esa tabla.Cada instancia de MySQL tiene una base de datos information_schema. Si ejecuta la siguiente consulta, proporcionará detalles completos sobre la tabla, incluido el número aproximado de filas en esa tabla.
fuente
Simplemente:
fuente
fuente
Solo haz un
Puede especificar condiciones con un Dónde después de eso
fuente
Si tiene varios campos en su tabla y su tabla es enorme, es mejor NO UTILIZAR
*
porque carga todos los campos en la memoria y usar lo siguiente tendrá un mejor rendimientofuente
Como mencionó Santosh , creo que esta consulta es adecuadamente rápida, aunque no consulta toda la tabla.
Para devolver el resultado entero del número de registros de datos, para un nombre de tabla específico en una base de datos particular :
fuente
count(*)
con conocimiento del rendimientofuente
Debe usar count () devuelve el número de filas que coinciden con un criterio específico
fuente
Si tiene una clave principal o una clave / índice único, el método más rápido posible (probado con tablas de 4 millones de filas)
y luego obtener el campo de cardinalidad (es casi instantáneo)
Tiempos donde de 0.4s a 0.0001ms
fuente