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

MySQL 하나의 쿼리로 데이터베이스 내 모든 테이블의 행 수 확인하는 방법

MySQL에서 하나의 쿼리로 테이블별 행 수 세기

데이터베이스에 속한 모든 테이블의 행(row) 수를 한 번의 쿼리로 확인하고 싶다면 INFORMATION_SCHEMA.TABLES 뷰의 TABLE_ROWS 컬럼을 활용하면 됩니다. 각 테이블을 일일이 열어서 COUNT(*)를 실행하는 것보다 훨씬 빠르고 간편하게 전체 현황을 파악할 수 있습니다.

기본 문법

아래와 같이 INFORMATION_SCHEMA.TABLES에서 테이블 이름과 TABLE_ROWS를 함께 조회하면 됩니다.

SELECT table_name, TABLE_ROWS 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_SCHEMA = 'yourDatabaseName';

'yourDatabaseName' 부분은 실제 사용 중인 데이터베이스(스키마) 이름으로 바꿔서 실행하면 됩니다.

실제 적용 예시

예를 들어 'business'라는 데이터베이스에 포함된 모든 테이블의 행 수를 조회하는 쿼리는 다음과 같습니다.

mysql> SELECT table_name, TABLE_ROWS 
    -> FROM INFORMATION_SCHEMA.TABLES 
    -> WHERE TABLE_SCHEMA = 'business';

쿼리를 실행하면 테이블 이름과 해당 테이블의 행 수가 한 줄씩 출력됩니다.

+--------------------+------------+
| TABLE_NAME         | TABLE_ROWS |
+--------------------+------------+
| accentsearchdemo   |          2 |
| add1daydemo        |          2 |
| autoincrement      |          4 |
| bookindexes        |          4 |
| deletedemo         |          5 |
| deleterecord       |          6 |
| distinctdemo       |          8 |
| employeetable      |          0 |
| limitoffsettable   |         13 |
| randoptimizedemo   |         26 |
| rankdemo           |          5 |
| ...                |        ... |
+--------------------+------------+

결과에서 알 수 있듯이, 비어 있는 테이블은 0으로 표시되고 데이터가 있는 테이블은 저장된 행 수가 그대로 출력됩니다.

주의: InnoDB 테이블에서는 근사치 값

TABLE_ROWS는 MyISAM 테이블에서는 정확한 행 수를 반환하지만, InnoDB 테이블에서는 근사치(approximate value)라는 점에 유의해야 합니다. InnoDB는 내부적으로 유지하는 통계 정보를 기반으로 행 수를 추정하기 때문에, 특히 대량의 INSERT나 DELETE가 자주 발생하는 테이블에서는 실제 값과 차이가 날 수 있습니다.

따라서 정확한 행 수가 반드시 필요한 경우에는 각 테이블마다 SELECT COUNT(*)를 실행해야 합니다. 소수의 테이블이라면 UNION ALL을 활용해 한 번의 쿼리로 정확한 카운트를 얻을 수도 있습니다.

SELECT 'table1' AS table_name, COUNT(*) AS row_count FROM table1
UNION ALL
SELECT 'table2', COUNT(*) FROM table2;

정리

- 전체 테이블의 행 수를 빠르게 개요 파악할 때 → INFORMATION_SCHEMA.TABLES의 TABLE_ROWS 조회
- 정확한 개수가 필요할 때 → COUNT(*) 직접 실행 또는 UNION ALL 조합 활용

상황에 맞게 두 가지 방법을 구분해서 사용하면, 데이터베이스 관리와 디버깅 작업을 훨씬 효율적으로 처리할 수 있습니다.