Запрос для подсчета количества таблиц в MySQL


130

Я увеличиваю количество таблиц, которые у меня есть, и мне иногда бывает любопытно просто выполнить быстрый запрос командной строки, чтобы подсчитать количество таблиц в моей базе данных. Это возможно? Если да, то каков запрос?

Ответы:


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

Источник

Это мое:

USE databasename; 
SHOW TABLES; 
SELECT FOUND_ROWS();

Я пробовал два вышеупомянутых метода, и количество таблиц, которые вернулись, когда я использовал, 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
У меня это заработало, только когда я использовал только подзапрос. При попытке выполнить весь запрос / подзапрос возникла синтаксическая ошибка.
Gaia

2
@Gaia Извини, я забыл, что База данных было зарезервированным словом. Итак, я заключил слово в двойные кавычки.
RolandoMySQLDBA

@RolandoMySQLDBA Это мило, у вас есть такой, который также показывает общий размер всех баз данных?
J. Scott Elblein

@ 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

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

1
Это должен быть ответ, поскольку не включает просмотры! +1
Testo Testini

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 лет назад.

хороший и однозначный ответ, и дело в очень простой команде. perfect
Ajay2707 04

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

Это довольно очевидно для тех, кто знаком с этим запросом, но для тех, кто не знаком, небольшое объяснение было бы отличным дополнением к этому ответу.
mickmackusa

Кажется, это просто повторение существующего ответа .
Pang

Для записи: помните, что общее количество элементов включает таблицы и представления как объекты базы данных.
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';

Это не ответ на вопрос.
Майк,

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

это для всех таблиц в БД?


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.