데이터베이스 내 모든 테이블에 포함된 필드(컬럼)의 총 개수를 확인하려면 information_schema.columns 뷰와 집계 함수 COUNT(*)를 함께 사용하면 됩니다.
기본 조회 방법
INFORMATION_SCHEMA.COLUMNS는 데이터베이스의 모든 테이블과 컬럼에 대한 메타 정보를 담고 있는 시스템 뷰입니다. 여기서 TABLE_SCHEMA 조건으로 특정 데이터베이스를 지정한 뒤 COUNT(*)로 행 수를 세면 해당 데이터베이스 전체의 필드 총 개수를 구할 수 있습니다.
예를 들어 여러 테이블과 필드로 구성된 'sample' 데이터베이스가 있다고 가정해 보겠습니다. 다음은 이 데이터베이스의 모든 테이블에 있는 필드 총 개수를 구하는 쿼리입니다.
mysql> SELECT COUNT(*) AS TOTAL_NUMBER_OF_FIELDS
-> FROM INFORMATION_SCHEMA.COLUMNS
-> WHERE TABLE_SCHEMA = 'sample';
위 쿼리를 실행하면 아래와 같은 결과가 출력됩니다.
+------------------------+
| TOTAL_NUMBER_OF_FIELDS |
+------------------------+
| 796 |
+------------------------+
1 row in set (0.04 sec)
다른 데이터베이스에 적용하기
같은 방식으로 WHERE 절의 TABLE_SCHEMA 값만 바꾸면 어떤 데이터베이스든 손쉽게 조회할 수 있습니다. 이번에는 'test' 데이터베이스를 대상으로 실행해 보겠습니다.
mysql> SELECT COUNT(*) AS TOTAL_NUMBER_OF_FIELDS
-> FROM INFORMATION_SCHEMA.COLUMNS
-> WHERE TABLE_SCHEMA = 'test';
실행 결과는 다음과 같습니다.
+------------------------+
| TOTAL_NUMBER_OF_FIELDS |
+------------------------+
| 1108 |
+------------------------+
1 row in set (0.03 sec)
참고 사항
현재 접속 중인 데이터베이스를 기준으로 조회하려면 WHERE 절에서 DATABASE() 함수를 사용하면 더욱 편리합니다.
SELECT COUNT(*) AS TOTAL_NUMBER_OF_FIELDS
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = DATABASE();
또한 특정 테이블별 필드 수를 함께 확인하고 싶다면 GROUP BY 절을 활용할 수 있습니다.
SELECT TABLE_NAME, COUNT(*) AS FIELD_COUNT
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'sample'
GROUP BY TABLE_NAME;
이처럼 INFORMATION_SCHEMA.COLUMNS를 활용하면 별도의 스크립트 없이 SQL 한 문장으로 데이터베이스 전체 또는 테이블별 컬럼 수를 간편하게 파악할 수 있습니다.