MySQL Row Count: Как получить количество строк в MySQL

Описание : в этой статье вы узнаете, как получить количество строк MySQL в базе данных.
Получение количества строк MySQL в одной таблице
Чтобы получить количество строк в одной таблице, вы используете оператор COUNT(*) в SELECT следующим образом:
SELECT 
    COUNT(*)
FROM
    table_name;
Например, чтобы получить количество строк в таблице andreyex в примере базы данных, используйте следующий оператор:
SELECT 
    COUNT(*)
FROM
    andreyex;
+ ---------- + | COUNT(*) | + ---------- + | 35 | + ---------- +
1 row in set (0.01 sec)
Получение количества строк MySQL в двух или более таблиц
Чтобы получить количество строк в нескольких таблицах, вы используете оператор UNION для объединения наборов результатов, возвращаемых каждым отдельным оператором SELECT.
Например, чтобы получить количество строк таблиц andreyex и trainings в одном запросе, используйте следующую инструкцию.
SELECT 
    'andreyex' tablename, 
     COUNT(*) rows
FROM
    andreyex 
UNION 
SELECT 
    'trainings' tablename, 
     COUNT(*) rows
FROM
    trainings;
+ ----------- + ------ + | tablename | rows | + ----------- + ------ + | andreyex | 34 | | trainings | 451 | + ----------- + ------ +
2 rows in set (0.01 sec)
Получение количества строк MySQL всех таблиц в конкретной базе данных
Чтобы получить количество строк всех таблиц в конкретной базе данных, например classicmodels, вы используете следующие шаги:
- Во-первых, получить все имена таблиц в базе данных
 - Во-вторых, создайте оператор SQL, который включает все операторы SELECT COUNT(*) FROM table_name для всех таблиц, разделенных UNION.
 - В-третьих, выполните оператор SQL, используя оператор prepared
 
Во-первых, чтобы получить все имена таблиц базы данных, вы запрашиваете из базы данных information_schema следующее:
SELECT 
    table_name
FROM
    information_schema.tables
WHERE
    table_schema = 'classicmodels'
        AND table_type = 'BASE TABLE';
+ -------------- + | TABLE_NAME | + -------------- + | andreyex | | trainings | | sites | + -------------- +
3 rows in set (0.02 sec)
Во- вторых, построить оператор SQL, мы используем функции GROUP_CONCAT и CONCAT следующим образом:
SELECT 
    CONCAT(GROUP_CONCAT(CONCAT('SELECT \'',
                        table_name,
                        '\' table_name,COUNT(*) rows FROM ',
                        table_name)
                SEPARATOR ' UNION '),
            ' ORDER BY table_name')
INTO @sql 
FROM
    table_list;
В этом запросе приведен список имен таблиц table_list, который является результатом запроса на первом этапе.
Следующий запрос использует первый запрос как производную таблицу и возвращает инструкцию SQL в виде строки.
SELECT 
    CONCAT(GROUP_CONCAT(CONCAT('SELECT \'',
                        table_name,
                        '\' table_name,COUNT(*) rows FROM ',
                        table_name)
                SEPARATOR ' UNION '),
            ' ORDER BY table_name')
INTO @sql 
FROM
    (SELECT 
        table_name
    FROM
        information_schema.tables
    WHERE
        table_schema = 'classicmodels'
            AND table_type = 'BASE TABLE') table_list
Если вы используете MySQL 8.0+, вы можете использовать MySQL CTE (общее табличное выражение) вместо производной таблицы:
WITH table_list AS (
SELECT
    table_name
  FROM information_schema.tables 
  WHERE table_schema = 'classicmodels' AND
        table_type = 'BASE TABLE'
) 
SELECT CONCAT(
            GROUP_CONCAT(CONCAT("SELECT '",table_name,"' table_name,COUNT(*) rows FROM ",table_name) SEPARATOR " UNION "),
            ' ORDER BY table_name'
        )
INTO @sql
FROM table_list; 
В-третьих, вы выполняете оператор @sql, используя подготовленный оператор следующим образом:
PREPARE s FROM @sql; EXECUTE s; DEALLOCATE PREPARE s;
Получение количества строк MySQL всех таблиц в базе данных одним запросом
Быстрый способ получить количество строк всех таблиц в базе данных — запрос данных из базы данных information_schema напрямую:
SELECT 
    table_name, 
    table_rows
FROM
    information_schema.tables
WHERE
    table_schema = 'classicmodels'
ORDER BY table_name;
Этот метод иногда не точен, потому что количество строк в information_schema и фактическое количество строк в таблицах не синхронизированы. Чтобы избежать этого, вы должны выполнить инструкцию ANALYZE TABLE перед запросом количества строк из базы данных information_schema.
ANALYZE TABLE table_name, ...;
В этой статье вы узнали о различных способах получения количества строк одной или нескольких таблиц в базе данных MySQL.
Редактор: AndreyEx