250x250
반응형
Notice
Recent Posts
Recent Comments
Link
종식당
[매일메일 2025-02-11] 데이터베이스 인덱스에 대해서 설명해주세요. 본문
728x90
반응형
🍳 인덱스
- 인덱스는 데이터베이스 테이블의 검색 속도를 향상하기 위한 자료구조로 백과사전의 색인과 같다.
- 저장되는 컬럼의 값을 사용하여 항상 정렬된 상태를 유지하는 것이 특징이다.
- 이러한 특징으로 인해 인덱스는 INSERT, UPDATE, DELETE의 성능이 희생된다는 것이 단점이다.
🥬 인덱스는 어떤 자료 구조로 이루어져 있나요?
- MYSQL InnoDB를 기준으로 B+Tree와 같은 변형 B-Tree 자료구조를 이용해서 인덱스를 구현한다.
기본 토대는 B-Tree 인덱스이기 때문에 이를 기준으로 설명한다.
B-Tree 인덱스는 칼럼의 값을 변형하지 않고 인덱스 구조체 내에서 항상 정렬된 상태로 유지한다. - B-Tree에서는 크게 3가지 노드가 존재한다. 최상위에 하나의 루트 노드가 존재하며, 가장 하위 노드인 리프 노드가 존재한다.
이 두 노드의 중간에 존재하는 브랜치 노드가 존재한다. 최하위 노드인 리프 노드에는 실제 데이터 레코드를 찾아가기 위한 주솟값을 가지고 있다. - InnoDB 스토리지 엔지엔서는 세컨더리 인덱스(프라이머리 인덱스를 제외한 모든 인덱스)의 리프 노드에는 레코드의 PK가 저장된다.
따라서 인덱스 검색에서는 레코드를 읽기 위해 PK를 가지고 있는 B-Tree를 다시 한번 검색해야 한다.
🍞 MySQL 스캔 방식은 어떤 게 있나요?
- 🚓 인덱스 레인지 스캔
검색할 인덱스 범위가 결정되었을 경우 사용하며 가장 빠르다.
인덱스에서 조건을 만족하는 값이 저장된 시작 리프 노드를 찾는다 -> index seek
시작 리프 노드부터 필요한 만큼 인덱스를 차례대로 읽는다 -> index scan
인덱스 키와 레코드 주소를 이용해 저장된 페이지를 가져오고 레코드를 읽어온다.
레코드를 읽어오는 과정에서 랜덤 IO가 발생할 수 있다. 읽어야 할 데이터 레코드가 전체 20-25%의 경우에는 풀 데이터 스캔(순차 IO를 이용) 이 더욱 좋을 수 있다. - 🛻 인덱스 풀 스캔
인덱스를 사용하지만 인덱스를 처음부터 끝까지 모두 읽는 방식
인덱스를 ABC순서로 만들었는데 조건절에 B 혹은 C로 검색하는 경우 사용
인덱스를 생성하는 목적은 아니지만, 그래도 풀 테이블 스캔보다는 낫다. - 🚛 루스 인덱스 스캔 (위 두 개는 타이트 인덱스 스캔)
듬성듬성하게 인덱스를 읽는 것
중간에 필요하지 않은 인덱스 키 값은 무시하고 다음으로 넘어가는 형태로 처리
group by, max, min함수에 대해 최적화하는 경우에 사용
728x90
반응형
'매일메일' 카테고리의 다른 글
[매일메일 2025-02-14] 로그와 메트릭을 설명해주세요. (0) | 2025.02.16 |
---|---|
[매일메일 2025-02-14] 인터넷 창에 www.google.com를 입력하면 무슨 일이 일어나는지 설명해주세요. (0) | 2025.02.15 |
[매일메일 2025-02-06] JPA의 N + 1 문제에 대해서 설명해주세요. (0) | 2025.02.11 |
[매일메일 2025-02-10] 일급 컬렉션이 무엇인가요? (0) | 2025.02.10 |
[매일메일 2025-02-05] 엔티티 매니저에 대해 설명해주세요. (0) | 2025.02.09 |