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

MySQL 데이터베이스 테이블 크기 확인 방법 – information_schema 활용하기

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를 활용하면 데이터베이스 전체 또는 개별 테이블의 용량을 빠르게 파악할 수 있어, 스토리지 관리나 성능 최적화 작업에 매우 유용하게 활용됩니다.