MySQL - 如何在一个查询中计算每个表的所有行

Lee*_*Lee 68 mysql sql count

有没有办法查询数据库以找出所有表中有多少行?

table1 1234
table2 222
table3 7888
Run Code Online (Sandbox Code Playgroud)

希望你能提出建议

gre*_*ama 152

SELECT 
    TABLE_NAME, 
    TABLE_ROWS 
FROM 
    `information_schema`.`tables` 
WHERE 
    `table_schema` = 'YOUR_DB_NAME';
Run Code Online (Sandbox Code Playgroud)

  • 据我所知,InnoDB表没有存储行数.此查询最多可以给出近似值. (33认同)
  • 注意:`TABLE_ROWS`可能与当前表内容不同步,但您可以通过运行`ANALYZE`;)来更新它. (8认同)
  • 要获取 2 个以上表的总计数,您可以修改它:`SELECT SUM(TABLE_ROWS) FROM information_schema.tables WHERE table_schema = 'YOUR_DATABASE_NAME' && (TABLE_NAME='table1' || TABLE_NAME='table2')` (3认同)
  • 我只是添加`ORDER BY TABLE_ROWS DESC`来检测猪。 (3认同)

tjm*_*wan 8

将上面的信息和这篇文章合成一组查询,我们得到一个自写查询,它将提供准确的行数:

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;
Run Code Online (Sandbox Code Playgroud)


小智 7

上面将给出一个近似值,但如果你想要一个精确的计数,它可以分两步完成.首先,执行如下查询:

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

这将生成一个SQL语句列表,一个用于数据库中的每个表,然后可以运行以获得精确计数.


小智 6

这将为您提供确切的表名称和单个列表上的计数

SELECT CONCAT('SELECT ''',table_name,''', COUNT(*) FROM ', table_name, ' union all') 
      FROM information_schema.tables WHERE table_schema = 'clw';
Run Code Online (Sandbox Code Playgroud)


Nir*_*Nir 5

SELECT 
    table_name, 
    table_rows 
FROM 
    INFORMATION_SCHEMA.TABLES
Run Code Online (Sandbox Code Playgroud)