MySQL 데이터베이스에서 각 테이블이 차지하는 디스크 용량을 확인하고 싶다면 information_schema.TABLES 뷰를 활용하는 것이 가장 간편한 방법입니다. 이 시스템 뷰에는 테이블 이름, 데이터 길이(DATA_LENGTH), 인덱스 길이(INDEX_LENGTH) 등 다양한 메타데이터가 저장되어 있어, 이를 조합하면 테이블별 실제 크기를 손쉽게 계산할 수 있습니다.
MySQL 테이블 크기 조회 기본 문법
특정 데이터베이스에 속한 모든 테이블의 크기를 MB(메가바이트) 단위로 한 번에 확인하려면 아래 쿼리를 사용하세요.
SELECT TABLE_NAME AS `ALLTABLESNAME`, ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024) AS `TABLESIZEIN(MB)` FROM information_schema.TABLES WHERE TABLE_SCHEMA = "yourDatabaseName" ORDER BY (DATA_LENGTH + INDEX_LENGTH) ASC;
쿼리 구성 요소 살펴보기:
- DATA_LENGTH: 테이블에 저장된 실제 데이터가 차지하는 공간의 크기입니다.
- INDEX_LENGTH: 테이블의 인덱스가 사용하는 공간의 크기입니다.
- 두 값을 더한 뒤 1024로 두 번 나누어 바이트 단위를 MB 단위로 변환하고, ROUND() 함수로 반올림해 가독성을 높였습니다.
- TABLE_SCHEMA 조건으로 조회 대상 데이터베이스를 지정하며, ORDER BY 절을 통해 크기순으로 정렬할 수 있습니다.
실제 적용 예시
이번에는 'business'라는 데이터베이스의 전체 테이블 크기를 조회해 보겠습니다.
mysql> SELECT TABLE_NAME AS `ALLTABLESNAME`, ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024) AS `TABLESIZEIN(MB)` -> FROM information_schema.TABLES WHERE TABLE_SCHEMA = "business" -> ORDER BY (DATA_LENGTH + INDEX_LENGTH) ASC;
실행 결과
+------------------------------------------------------------------+-----------------+ | ALLTABLESNAME | TABLESIZEIN(MB) | +------------------------------------------------------------------+-----------------+ | studentrecordwithmyisam | 0 | | querydatedemo | 1 | | rownumberdemo | 0 | | secondtable | 0 | | spacecolumn | 2 | | table1 | 0 | | tbldemotrail | 2 | | tblstudent | 0 | | timestamptodatedemo | 1 | | uniqueconstraintdemo | 0 | | usernameandpassworddemo | 2 | | addingunique | 5 | | bookindexes | 0 | | tblf | 0 | | uniquedemo | 2 | | multipleindexdemo | 0 | | uniquedemo1 | 0 | | foreigntable | 5 | | tabledemo2 | 0 | | foreigntabledemo | 2 | | studentenrollment | 0 | | tabledemo3 | 0 | | duplicatebookindexes | 0 | | clonestudent | 2 | | student | 0 | +------------------------------------------------------------------+-----------------+ 26 rows in set (10.29 sec)
실행 결과를 보면 'addingunique'와 'foreigntable' 테이블이 각각 5MB로 가장 많은 용량을 차지하고 있으며, 나머지 대부분의 테이블은 0~2MB 수준인 것을 확인할 수 있습니다. 이처럼 information_schema를 활용하면 데이터베이스 전체 또는 개별 테이블의 용량을 빠르게 파악할 수 있어, 스토리지 관리나 성능 최적화 작업에 매우 유용하게 활용됩니다.