TIL | DB Index / Full Table Scan

김윤희·2022년 8월 25일
0

DB Index는 데이터베이스 찾을때 효율을 높이기 위해서 사용

index : 목차, 백과사전 제일 뒤쪽에 단어(주제)별로 정리 해놓은 것 등...

❗ Full Table Scan

SELECT * FROM records WHERE username = "jamessoun93";

위와 같은 쿼리를 실행하게 되면 어떻게 될까 ?

테이블 하나에 대한 데이터는 하나의 Heap File로 저장된다
하지만 해당 테이블의 전체 데이터는 여러 개의 Block으로 그룹 지어져 저장되어 있는 형태이기 때문에 MySQL이 바로 Heap File에 접근해서 스캔을 시작할 수 없다

그래서 스캔할 대상이 되는 모든 데이터를 메모리에 모아놓고 메모리에서 순차적으로 하나하나 확인을 하면서 원하는 데이터를 찾는다

Heap 파일로부터 모든 데이터를 메모리로 옮겨 데이터 하나하나 원하는 조건에 맞는지 확인하는 작업이 바로 Full Table Scan 이다



❗ Index

index의 장점은 빠르게 값을 찾을 수 있지만,
단점은 테이블을 하나 더 만들기 때문에 용량을 차지하고 디비에 데이터가 수정될 때마다 index도 업데이트르 해줘야한다

(이 단점을 안고도 빠르게 값을 찾아야하기 때문에 A 회사는 index를 쓴다.
B회사는 디비 수정이 많은 시스템이라 index를 사용하지 않는다.
처럼 각각 상황에 맞춰서 사용할지 하지 않을지 고민하고 정해야한다)

CUD > S = index 사용하지 않음
CUD < S = index 사용

인덱스를 생성하는 문법

CREATE INDEX 인덱스명 ON 테이블명 (컬럼명);

아래 명령어를 입력하면 records_username_idx라는 이름으로 인덱스가 생성

CREATE INDEX records_username_idx ON records (username);

인덱스를 삭제하는 문법

DROP INDEX 인덱스명 ON 테이블명;
DROP INDEX records_username_idx ON records;

0개의 댓글