본문 바로가기

cs(with 매일메일)

[250923화] 데이터베이스 인덱스에 대해서 설명해주세요.

정의 : 말 그대로 목차이다. 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조.

특징 : 저장되는 컬럼 값을 사용하여 항상 정렬된 상태를 유지한다.

단점 : INSERT, UPDATE, DELETE의 성능이 약화된다.

 

인덱스의 자료구조 : B+Tree, B-Tree (MySQL InnoDB 기준)

 

B-Tree

- 3가지 노드 : 루프 노드 1개 / 브랜치 노드 / 리프 노드

- 인덱스는 페이지 단위로 저장, 인덱스 키를 바탕으로 항상 정렬된 상태를 유지

 

 

페이지(Page)

- 정의 : 디스크와 메모리에 데이터를 읽고 쓰는 최소 작업 단위

- 일반적인 인덱스를 포함해 PK, 테이블 등은 모두 페이지 단위로 관리된다. 따라서 만약 퀘리를 통해 1개의 레코드를 읽고 싶더라도 결국은 하나의 블록을 읽어야 한다는 것.

- 그래서 페이지에 저장되는 개별 데이터의 크기를 최소한으로 하여, 1개의 페이지에 많은 데이터들을 저장하는것이 중요하다. 하나의 페이지에 저장되는 데이터의 크기가 클 수록 디스크I/O가 많아지거나, 메모리 캐싱할 수 있는 페이지 수가 줄어들수있다. 

(DB 성능 개선 혹은 쿼리 튜닝은 디스크I/O자체를 줄이는 것이 핵심인 경우가 많다)

 

 

MySQL 스캔 방식

1) 인덱스 레인지 스캔

2) 인덱스 풀 스캔

3) 루스 인덱스 스캔

 

===

✨디스크I/O : 디스크와 메모리 간 데이터 이동