web-dev-qa-db-ja.com

MySQL-1つのクエリでテーブルごとにすべての行をカウントする方法

DBにクエリを実行して、すべてのテーブルにある行数を調べる方法はありますか?

つまり.

table1 1234
table2 222
table3 7888

あなたが助言できることを願っています

66
Lee
SELECT 
    TABLE_NAME, 
    TABLE_ROWS 
FROM 
    `information_schema`.`tables` 
WHERE 
    `table_schema` = 'YOUR_DB_NAME';
147
great_llama

上記は近似値を示しますが、正確なカウントが必要な場合は、2つのステップで実行できます。まず、次のようなクエリを実行します。

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

データベース内の各テーブルに1つずつ、SQLステートメントのリストが生成されます。その後、実行して正確なカウントを取得できます。

7
ande

これにより、単一のリストで正確なテーブル名とカウントが得られます

SELECT CONCAT('SELECT ''',table_name,''', COUNT(*) FROM ', table_name, ' union all') 
      FROM information_schema.tables WHERE table_schema = 'clw';
6
petrichi
SELECT 
    table_name, 
    table_rows 
FROM 
    INFORMATION_SCHEMA.TABLES
5
Nir

上記の情報と this post を1つのクエリセットに合成すると、正確な行カウントを提供する自己記述クエリが得られます。

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;
4
tjmcewan
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
3
a1ex07

テーブルだけが必要で、ビューが必要ない場合は、おそらくこれが必要です。

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