[MySQL] Index/ Partition

이영주·2021년 3월 27일
0

index

▶ 정의
Index는 RDBMS에서 검색 속도를 높이기 위한 자료구조이다.
모든 데이터를 검색하면 시간이 오래 걸리기 때문에 데이터와 데이터의 위치를 포함한 자료구조를 생성한다.

▶ 구조
논리적/물리적으로 테이블과 독립적이다.
Index는 KEY 컬럼과 ROWID 컬럼 두개로 이루어져 있고 정렬이 가능하다.

Key : 인덱스를 생성하라고 지정한 컬럼의 값
MySQL에서 테이블 생성 시, 아래와 같은 3가지 파일이 생성된다.

FRM : 테이블 구조 저장 파일
MYD : 실제 데이터 파일
MYI : Index 정보 파일 (Index 사용 시 생성)
사용자가 쿼리를 통해 Index를 사용하는 칼럼을 검색하게 되면, 이때 MYI 파일의 내용을 활용한다.

디스크 공간은 보통 테이블을 저장하는 데 필요한 디스크 공간보다 작다.
왜냐하면 보통 인덱스는 KEY-ROWID만 가지고 있고, 테이블의 세부항목들은 갖고 있지 않기 때문이다.

▶ 사용
인덱스 생성

CREATE INDEX [인덱스명] ON [테이블명](컬럼1, 컬럼2);
ALTER TABLE  테이블명 ADD INDEX(필드명(크기));

UNIQUE - 컬럼값에 중복값을 허용하지 않음

EX> CREATE[UNIQUE] INDEX EX_INDEX ON CUSTOMERS(NAME,ADDRESS); 

인덱스 삭제

DROP INDEX [인덱스 명]

인덱스 확인

SHOW INDEX FROM 테이블이름

해시 테이블(Hash Table), B+Tree -> 이해가 안된다.

Partition

▶ 정의
Partition은 MySQL Server에서는 데이터를 별도의 테이블로 분리해서 저장하지만 사용자는 여전히 하나의 테이블로 읽기와 쓰기를 할 수 있게 해주는 기능

▶ Partition을 사용하는 이유
1) INSERT와 범위 SELECT의 빠른 처리

인덱스는 일반적으로 SELECT를 위한 것으로 보이지만 UPDATE와 DELETE 쿼리를 위해 필요하기도 하다.
테이블의 사이즈의 커서 인덱스의 크기가 메모리 크기 보다 훨씬 큰 경우 파티션 테이블을 이용하여 분할하면
인덱스도 각각 생성되기 때문에 작은 인덱스 크기로 인해 메모리에서 빠르게 쿼리 작업을 진행할 수 있다.

2) 주기적으로 삭제 등의 작업이 이루어지는 이력성 데이터의 효율적인 관리
비지니스 로직이나 제도화된 법에 의해서 필수 보관주기가 지난 데이터의 정리나 로그성 데이터의 테이블을 파티션 테이블로 관리한다면 불필요한 데이터 삭제 작업은 단순히 파티션을 추가하거나 삭제하는 방식으로 간단하고 빠르게 해결할 수 있다.

3) 데이터의 물리적인 저장소를 분리
파티션을 통해 파일의 크기를 조절하거나 각 파티션별 파일들이 저장될 위치나 디스크를 구분해서 지정/저장 할 수 있다.

▶ 사용
Range, List, Hash, Key 이렇게 총 네 가지방법이 존재한다.

사용은 좀 어렵다.

참고블로그
https://mangkyu.tistory.com/96

0개의 댓글