정의 : 말 그대로 목차이다. 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조.
특징 : 저장되는 컬럼 값을 사용하여 항상 정렬된 상태를 유지한다.
단점 : 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 : 디스크와 메모리 간 데이터 이동
'cs(with 매일메일)' 카테고리의 다른 글
| [250930화] equals와 hashCode는 왜 함께 재정의해야 할까요? (0) | 2025.09.30 |
|---|---|
| [250922월] 일급 컬렉션(패턴)이 무엇인가요? (0) | 2025.09.29 |
| [250924수] 트랜잭션 격리수준은 무엇인가요? (0) | 2025.09.29 |
| [250925목] 얕은 복사와 깊은 복사에 대해서 설명해주세요. (0) | 2025.09.29 |
| [250926금] 로그와 메트릭을 설명해주세요. (0) | 2025.09.29 |