본문 바로가기

학교 수업/데이터베이스

데이터베이스 13주차

구조 최적화 - 테이블의 크기

테이블 별 행의 개수, 평균 바이트, 인덱스 크기 등 보기

SHOW TABLE STATUS FROM [스키마 명];

열 개수 보기

SHOW CULUMNS FROM [테이블 명];

각 열의 최대값, 최소값 최대길이, 최소길이, 등 보기

# 제안하는 테이블 구조
SELECT * FROM [테이블 명] PROCEDURE ANALYSE();

추가설명

더보기

ENUM 데이터 타입은 변하지 않는 작은 범위의 값을 저장하는 용도이다.

하지만 데이터 변경/재사용이 어렵고, DB호환성, 최적화 성능이 낮음 등의 이유로 인해 대부분의 테이블에서 ENUM을 찾아볼 수 없다.

대신 INT, CHAR 등 다양한 데이터 타입을 사용함으로써 데이터베이스의 구조를 최적화한다.

최적의 데이터타입은 숫자형 > 문자 및 문자열 > BLOB 순으로 좋다.


페이지 압축

내부 엔진 수준에서 동작

zlib/LZ4 등의 압축 방식 지원

운영체제 별 파일 시스템 지원이 필요하기 때문에 활용도가 떨어진다.

ALTER TABLE [테이블 명] COMPRESSION="zlib";
OPTIMIZE TABLE [테이블 명]

 

테이블 압축

페이지 압축보다 활용도가 높다.

쿼리 처리 성능이 저하될 수 있다.

데이터 변경이 많은 경우 압축률이 떨어진다.

ALTER TABLE [테이블 명] ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8;
OPTIMIZE TABLE [테이블 명];

 

OPTIMIZE TABLE 명령문을 사용하여 사용하지 않는 공간을 회수한다.

 


테이블 크기를 줄이는 방법

인덱스

짧은 이름을 사용하게 한다.

NULL값이 있으면 안된다.

삽입/업데이트 쿼리에 사용하지 않는다.

# innodb_large_prefix가 활성화 되어 있는지 확인한다.
# 활성화 되어 있다면 인덱스의 최대 크기는 3072 바이트
# 활성화 되어 있지 않다면 인덱스의 최대 크기는 767바이트이다.
SHOW VARIABLES LIKE 'innodb_large_prefix%';

 

조인

짧은 이름을 사용하게 한다.

동일한 데이터 타입끼리 조인한다.


구조 최적화 - 다중 테이블

SELECT문을 돌리면 캐싱이 일어나며 캐시가 쌓이게 된다. 이 캐시들을 지움으로써 최적화를 한다.

 

캐시 설정 확인

SHOW VARIABLES LIKE 'have_query_cache';

캐시 용량 확인(바이트 단위)

SHOW VARIABLES LIKE 'query_cache_size';

캐시 제한 용량 확인

SHOW VARIABLES LIKE 'query_cache_limit';

캐시 상태 확인

SHOW STATUS LIKE 'Qcache%';

캐시 삭제

RESET QUERY CACHE;

 

INSERT, UPDATE, DELETE가 발생하면 기존의 캐시를 삭제한다.


구조 최적화 - 내부 임시 테이블

UNION, 서브쿼리, 조인, INSERT, UPDATE에서 사용할 경우 효과적이다.

세션 혹은 연결이 종료되면 임시 테이블은 자동으로 삭제된다.

하지만 삭제가 안 될 수 도 있기 때문에 명시적으로 삭제가 필요하다.

임시 테이블 확인

SHOW STATUS WHERE VARIABLE_NAME like '%tmp%';

임시 테이블 크기 확인(max_heap_table_size - tmp_table_size)

SHOW VARIABLES WHERE VARIABLE_NAME IN('tmp_table_size', 'max_heap_table_size');

임시 테이블 생성

CREATE TEMPORARY TABLE [테이블 명](열 데이터타입, 열 데이터타입, ...)

임시 테이블 삭제

DROP TABLE [테이블 명];

 

'학교 수업 > 데이터베이스' 카테고리의 다른 글

데이터베이스 12주차  (0) 2022.06.12
데이터베이스 11주차  (0) 2022.06.04
데이터베이스 10주차  (0) 2022.06.03
데이터베이스 9주차  (0) 2022.05.30
데이터베이스(2) - DCL  (0) 2022.04.16