MySQL에서 여러 데이터베이스의 테이블 행 수 합계 구하기
여러 데이터베이스에 흩어져 있는 동일한 이름의 테이블들의 전체 행(row) 수를 한 번에 확인하려면, 집계 함수 SUM()과 INFORMATION_SCHEMA를 함께 사용하면 됩니다.
INFORMATION_SCHEMA는 MySQL 서버 내 모든 데이터베이스, 테이블, 컬럼 등의 메타데이터를 담고 있는 가상 데이터베이스입니다. 그중 information_schema.tables 뷰에는 각 테이블의 대략적인 행 수를 나타내는 TABLE_ROWS 컬럼이 포함되어 있어, 이를 활용하면 별도의 스크립트 없이 손쉽게 합계를 구할 수 있습니다.
1. 'web' 데이터베이스에 테이블 생성 및 데이터 입력
먼저 'web' 데이터베이스에 테스트용 테이블을 생성합니다.
mysql> create table DemoTable1568
-> (
-> Name varchar(20)
-> );
Query OK, 0 rows affected (0.61 sec)
INSERT 명령어로 몇 개의 레코드를 추가합니다.
mysql> insert into DemoTable1568 values('Chris');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable1568 values('Bob');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable1568 values('David');
Query OK, 1 row affected (0.13 sec)SELECT 문으로 저장된 레코드를 확인해 보겠습니다.
mysql> select * from DemoTable1568;
실행 결과는 다음과 같습니다.
+-------+
| Name |
+-------+
| Chris |
| Bob |
| David |
+-------+
3 rows in set (0.00 sec)
2. 'sample' 데이터베이스에 같은 이름의 테이블 생성
이번에는 'sample' 데이터베이스로 이동하여 동일한 이름의 테이블을 생성합니다.
mysql> use sample;
Database changed
mysql> create table DemoTable1568
-> (
-> Id int
-> );
Query OK, 0 rows affected (0.99 sec)
마찬가지로 레코드를 삽입합니다.
mysql> insert into DemoTable1568 values(101);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable1568 values(102);
Query OK, 1 row affected (0.34 sec)
mysql> insert into DemoTable1568 values(103);
Query OK, 1 row affected (0.29 sec)
mysql> insert into DemoTable1568 values(104);
Query OK, 1 row affected (0.14 sec)
SELECT 문으로 데이터가 정상적으로 들어갔는지 확인합니다.
mysql> select * from DemoTable1568;
실행 결과입니다.
+------+
| Id |
+------+
| 101 |
| 102 |
| 103 |
| 104 |
+------+
4 rows in set (0.00 sec)
3. INFORMATION_SCHEMA로 전체 행 수 합계 조회
이제 두 데이터베이스('web', 'sample')에 있는 DemoTable1568 테이블의 행 수를 합산하는 쿼리입니다.
mysql> select sum(table_rows) as TotalNumberOfRows from information_schema.tables
-> where table_name='DemoTable1568';
실행 결과는 다음과 같습니다.
+-------------------+
| TotalNumberOfRows |
+-------------------+
| 7 |
+-------------------+
1 row in set (0.19 sec)
'web' 데이터베이스의 3행과 'sample' 데이터베이스의 4행을 합쳐 총 7행이 조회된 것을 확인할 수 있습니다.
참고 사항
information_schema.tables의 TABLE_ROWS 값은 InnoDB 테이블의 경우 통계 정보를 기반으로 한 근사치(approximate)라는 점에 유의해야 합니다. 정확한 행 수가 필요하다면 각 테이블에 대해 COUNT(*)를 직접 실행하는 것이 좋습니다. 반면, 대략적인 규모 파악이나 모니터링 목적이라면 위 방법이 가장 빠르고 간편한 해결책입니다.