MySQLにあるテーブルの数をカウントするクエリ


129

テーブルの数を増やしており、データベース内のテーブルの数を数える簡単なコマンドラインクエリを実行したい場合があります。それは可能ですか?もしそうなら、クエリは何ですか?

回答:


296
SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = 'dbName';

ソース

これは私のものです:

USE databasename; 
SHOW TABLES; 
SELECT FOUND_ROWS();

上記の2つの方法を試したところFOUND_ROWS()、最初の方法を使用したときに返されたテーブルの数よりも、使用したときに返されたテーブルの数の方が多かった。
Amr

これはビューもカウントし、テーブルのみが必要な場合は追加しますAND table_type = 'BASE TABLE'
Thomasleveil

use databasename;コマンドに関するメモ。データベースが本当に大きい場合、コマンドは長い待機時間で実行できます。その場合、ログインはオプション-A、すなわち:mysql -uroot -p -Aで行う必要があり、コマンドは高速に動作します。
azurecorn

24

すべてのデータベースと要約をカウントしたい場合は、これを試してください:

SELECT IFNULL(table_schema,'Total') "Database",TableCount 
FROM (SELECT COUNT(1) TableCount,table_schema 
      FROM information_schema.tables 
      WHERE table_schema NOT IN ('information_schema','mysql') 
      GROUP BY table_schema WITH ROLLUP) A;

以下は実行例です。

mysql> SELECT IFNULL(table_schema,'Total') "Database",TableCount
    -> FROM (SELECT COUNT(1) TableCount,table_schema
    ->       FROM information_schema.tables
    ->       WHERE table_schema NOT IN ('information_schema','mysql')
    ->       GROUP BY table_schema WITH ROLLUP) A;
+--------------------+------------+
| Database           | TableCount |
+--------------------+------------+
| performance_schema |         17 |
| Total              |         17 |
+--------------------+------------+
2 rows in set (0.29 sec)

試してみる !!!


1
サブクエリのみを使用した場合にのみ機能しました。クエリ/サブクエリ全体を実行しようとすると、構文エラーが発生しました。
ガイア

2
@ガイア申し訳ありませんが、データベースが予約語であることを忘れていました。そこで、単語を二重引用符で囲みました。
RolandoMySQLDBA 2013

@RolandoMySQLDBAこれはすばらしいです。すべてのdbの合計dbサイズも表示できますか?
J.スコットエルブレイン2013年

J.ScottElblein @私のDBA.SEポストを試してみてください。dba.stackexchange.com/questions/31801/...
RolandoMySQLDBA

なぜFROM節の副問合せなのですか?なぜSELECT IFNULL(table_schema, 'Total') Database, COUNT(*) TableCount FROM information_schema.tables WHERE table_schema NOT IN ('information_schema','mysql') GROUP BY table_schema WITH ROLLUPですか?
eggyal 2015年

10
SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = 'dbo' and TABLE_TYPE='BASE TABLE'

1
にはビューが含まれていないため、これが答えになるはずです!+1
Testo Testini 2014年

4

これはあなたにあなたのmysqlのすべてのデータベースの名前とテーブル数を与えます

SELECT TABLE_SCHEMA,COUNT(*) FROM information_schema.tables group by TABLE_SCHEMA;

3

テーブルの数をカウントするには、次のようにします。

USE your_db_name;    -- set database
SHOW TABLES;         -- tables lists
SELECT FOUND_ROWS(); -- number of tables

時には簡単なことでうまくいきます。


これは、5年前に追加された承認済みの回答の内容とまったく同じです。

良い、ユニークな答えと事は非常に簡単なコマンドです。完璧
Ajay2707

3
SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = 'database_name';

これは、このクエリに精通している人にとっては一目瞭然ですが、そうでない人にとっては、この回答に少し説明を添えておくとよいでしょう。
mickmackusa 2017

これは、この既存の答えの単なる繰り返しのようです。
2018年

記録のために:要素の総数には、データベースオブジェクトとしてのテーブルとビューが含まれることに注意してください。
marcode_ely

1

データベースのテーブルを数える方法はいくつかあります。私のお気に入りはこれです:

SELECT
    COUNT(*)
FROM
    `information_schema`.`tables`
WHERE
    `table_schema` = 'my_database_name'
;

1
select name, count(*) from DBS, TBLS 
where DBS.DB_ID = TBLS.DB_ID 
group by NAME into outfile '/tmp/QueryOut1.csv' 
fields terminated by ',' lines terminated by '\n';

これは質問の答えにはなりません。
Mike

1

コマンドラインから:

mysql -uroot -proot  -e "select count(*) from 
information_schema.tables where table_schema = 'database_name';"

上記の例では、rootはユーザー名とパスワードで、localhostでホストされています。


0
SELECT COUNT(*) FROM information_schema.tables

これはDB内のすべてのテーブルに対するものですか?


-1

これが役立ち、データベース内のテーブルの数のみが返されることを願っています

Use database;

SELECT COUNT(*) FROM sys.tables;

6
sys.tables存在しないmysql
Grisha Weintraub
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.