2010-04-22 15 views
48

¿Hay alguna forma de consultar el DB para averiguar cuántas filas hay en todas las tablas?MySQL - Cómo contar todas las filas por tabla en una consulta

es decir

table1 1234 
table2 222 
table3 7888 

espera que usted pueda asesorar

+0

Respuesta extendida para hacerlo en un solo paso: http://stackoverflow.com/questions/24707814/mysql-summarize-all-table-row-counts-in-a-single-query – gwideman

Respuesta

107
SELECT 
    TABLE_NAME, 
    TABLE_ROWS 
FROM 
    `information_schema`.`tables` 
WHERE 
    `table_schema` = 'YOUR_DB_NAME'; 
+19

Por lo que sé, cuenta de filas no se almacena para tablas InnoDB. Esta consulta puede dar una aproximación como máximo. –

+0

no funciona para mí. "Table_rows" no encontrado –

+0

Para obtener el recuento total en más de 2 tablas, puede modificarlo: 'SELECT SUM (TABLE_ROWS) FROM information_schema.tables WHERE table_schema = 'YOUR_DATABASE_NAME' && (TABLE_NAME = 'table1' || TABLE_NAME = 'table2 ') ' – degenerate

6
SELECT 
    table_name, 
    table_rows 
FROM 
    INFORMATION_SCHEMA.TABLES 
5
select sum(cnt) from 
(
select count(*) as cnt from table1 
union ALL 
select count(*) as cnt from table2 
union ALL 
select count(*) as cnt from table3 
)t1 
+0

El resultado de su consulta será diferente de lo que OP quiere: use 'select *' en lugar de 'select sum (cnt)' nad también use 'union all' en lugar de' union';). –

+0

@ shA.t De acuerdo :) Actualizado. – a1ex07

4

Lo anterior le dará una aproximación, pero si quieres una cuenta exacta, se puede hacer en dos pasos. En primer lugar, ejecutar una consulta como la siguiente:

select concat("select '",table_name,"', count(*) from ",table_name,";") 
from `information_schema`.`tables` 
WHERE `table_schema` = '[your schema here]'; 

que producirá una lista de sentencias SQL, uno para cada tabla en su base de datos, a continuación, puede ejecutar obtener una cifra exacta.

5

Esto le dará el nombre de tabla exacta y contar con una lista única

SELECT CONCAT('SELECT ''',table_name,''', COUNT(*) FROM ', table_name, ' union all') 
     FROM information_schema.tables WHERE table_schema = 'clw'; 
0

La síntesis de la información anterior y this post en un conjunto de consultas, obtenemos una consulta auto-escritura que dará cuenta de las filas precisas :

SET @tableSchema = 'my_schema'; 
SET SESSION group_concat_max_len = 10000000; 
SET @rowCounts = (
    SELECT group_concat(CONCAT('SELECT ''',TABLE_NAME,''', COUNT(*) FROM ', TABLE_NAME) SEPARATOR ' union all ') 
    FROM information_schema.tables WHERE table_schema = @tableSchema 
); 
PREPARE statement FROM @rowCounts; 
EXECUTE statement; 

-- don't run dealloc until you've exported your results ;) 
DEALLOCATE PREPARE statement; 
0

probablemente querrá esto si lo que desea es tablas y no hay puntos de vista:

SELECT TABLE_NAME, TABLE_ROWS 
FROM `information_schema`.`tables` 
WHERE `table_schema` = 'schema' 
     AND TABLE_TYPE = 'BASE TABLE'; 
Cuestiones relacionadas