Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 여러 데이터베이스에 걸친 테이블의 총 행 수 조회 방법

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.tablesTABLE_ROWS 값은 InnoDB 테이블의 경우 통계 정보를 기반으로 한 근사치(approximate)라는 점에 유의해야 합니다. 정확한 행 수가 필요하다면 각 테이블에 대해 COUNT(*)를 직접 실행하는 것이 좋습니다. 반면, 대략적인 규모 파악이나 모니터링 목적이라면 위 방법이 가장 빠르고 간편한 해결책입니다.