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

MySQL에서 특정 행이나 열이 차지하는 디스크 공간을 쿼리하는 방법

MySQL에서 디스크 공간 조회하기

네, 가능합니다. information_schema.tables를 조회하면 특정 테이블의 데이터 크기(DATA_LENGTH), 인덱스 크기(INDEX_LENGTH), 평균 행 길이(AVG_ROW_LENGTH) 등을 확인하여 해당 테이블이 차지하는 디스크 공간을 파악할 수 있습니다.

기본 구문

사용하는 구문은 다음과 같습니다.

SELECT * FROM information_schema.tables WHERE table_name = 'yourTableName';

1단계: 테이블 생성

먼저 예제로 사용할 테이블을 생성하겠습니다.

mysql> create table DemoTable1600
-> (
-> StudentId int,
-> StudentFirstName varchar(20)
-> );
Query OK, 0 rows affected (0.51 sec)

2단계: 데이터 삽입

INSERT 명령을 사용해 테이블에 레코드를 추가합니다.

mysql> insert into DemoTable1600 values(100,'Bob');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable1600 values(101,'David');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable1600 values(102,'Carol');
Query OK, 1 row affected (0.19 sec)

3단계: 전체 레코드 조회

SELECT 문으로 테이블에 저장된 모든 레코드를 확인합니다.

mysql> select * from DemoTable1600;

실행 결과는 다음과 같습니다.

+-----------+------------------+
| StudentId | StudentFirstName |
+-----------+------------------+
| 100 | Bob |
| 101 | David |
| 102 | Carol |
+-----------+------------------+
3 rows in set (0.00 sec)

디스크 공간 확인하기

이제 information_schema.tables를 조회하여 특정 행·열 데이터가 속한 테이블이 차지하는 디스크 공간을 확인해 보겠습니다.

mysql> select * from information_schema.tables where table_name='DemoTable1600';

위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.

+---------------+--------------+---------------+------------+--------+---------+------------+------------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+-----------------+----------+----------------+---------------+
| TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME | TABLE_TYPE | ENGINE | VERSION | ROW_FORMAT | TABLE_ROWS | AVG_ROW_LENGTH | DATA_LENGTH | MAX_DATA_LENGTH | INDEX_LENGTH | DATA_FREE | AUTO_INCREMENT | CREATE_TIME | UPDATE_TIME | CHECK_TIME | TABLE_COLLATION | CHECKSUM | CREATE_OPTIONS | TABLE_COMMENT |
+---------------+--------------+---------------+------------+--------+---------+------------+------------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+-----------------+----------+----------------+---------------+
| def | web | demotable1600 | BASE TABLE | InnoDB | 10 | Dynamic | 0 | 0 | 16384 | 0 | 0 | 0 | NULL | 2019-10-19 14:34:46 | NULL | NULL | utf8_unicode_ci | NULL | | |
+---------------+--------------+---------------+------------+--------+---------+------------+------------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+-----------------+----------+----------------+---------------+
1 row in set (0.00 sec)

주요 컬럼 설명

  • TABLE_ROWS: 테이블에 저장된 대략적인 행 수 (InnoDB 엔진에서는 추정치입니다.)
  • AVG_ROW_LENGTH: 한 행(row)당 평균 바이트 크기
  • DATA_LENGTH: 테이블 데이터가 실제로 차지하는 디스크 공간
  • INDEX_LENGTH: 인덱스가 차지하는 디스크 공간
  • DATA_FREE: 아직 재활용되지 않은 빈 공간

AVG_ROW_LENGTH와 TABLE_ROWS를 곱하면 행 단위로 차지하는 공간을 추정할 수 있습니다. 다만 MySQL은 개별 열(column) 단위의 정확한 디스크 사용량을 직접 제공하지 않으므로, 위 정보들은 테이블 수준의 참고 지표로 활용하는 것이 좋습니다.