Open HJ-Rich opened 2 years ago
디스크 읽기 방식
인덱스란?
B-Tree 인덱스
클러스터링 인덱스
어떻게 디스크 I/O를 줄일 것이냐
쿼리를 튜닝해야
인덱스
항상 정렬을 해두었다가 검색시 쉽게 찾겠다
정렬을 유지해야 하기 때문에 비용이 발생
읽기 : 쓰기 비율이 8:2
Balanced Tree
가장 범용적으로 사용
컬럼의 값을 변형시키지 않으며, 정렬된 상태를 유지
루트 노드 -> 브랜치 노드 -> 리프 노드
InnoDB에는 클러스터링이 기본 적용
논리 주소를 이용해, B-Tree 를 다시 조회
InnoDB 에서만 지원
프라이머리 키에 대해서만 적용
비슷한 레코드끼리 묶어서 저장
키 값이 바뀌면 물리적 저장 위치도 바뀌어야한다
리프 노드 분리(Split)
스플릿 작업의 존재로 인해 쓰기 작업 비용이 비교적 크다
100% 일치
전방 일치
부등호 연산
InnoDB 스토리지 엔진이 디스크에 데이터를 저장하는 기본 단위
디스크 I/O 최소 작업 단위
노드들도 페이지 단위로 구분
인덱스 키의 크기가 커지면
성능 저하로 귀결
여러 리프 노드에 걸쳐 조회를 하게 되면,
I/O 횟수가 증가
주제
디스크 읽기 방식
인덱스란?
B-Tree 인덱스
클러스터링 인덱스
선정 이유
해당 텍스트
논하고자 하는 근본적인 주제는 바로 성능 개선!
데이터베이스 성능 개선이란 곧 디스크 I/O 줄이기
어떻게 디스크 I/O를 줄일 것이냐
로 귀결됩니다.쿼리를 튜닝해야
합니다.인덱스
가 있습니다.인덱스는 R을 위해 CUD를 희생하는 것
항상 정렬을 해두었다가 검색시 쉽게 찾겠다
는 컨셉입니다.정렬을 유지해야 하기 때문에 비용이 발생
합니다.읽기 : 쓰기 비율이 8:2
정도 라고 합니다.B-Tree 인덱스 알고리즘
Balanced Tree
의 약자인 B-Tree 인덱스 알고리즘은,가장 범용적으로 사용
되는 일반용도에 적합한 인덱스 알고리즘 입니다.컬럼의 값을 변형시키지 않으며, 정렬된 상태를 유지
합니다.루트 노드 -> 브랜치 노드 -> 리프 노드
의 구조를 띕니다.InnoDB에는 클러스터링이 기본 적용
되어, B-Tree를 다시 탐색할 수 있는 PK값이 리프 노드 인덱스 키에 매칭되는 값으로 할당됩니다.논리 주소를 이용해, B-Tree 를 다시 조회
하는 것입니다.클러스터링
InnoDB 에서만 지원
하고, 그 외 스토리지 엔진에선 지원하지 않습니다프라이머리 키에 대해서만 적용
됩니다.비슷한 레코드끼리 묶어서 저장
합니다.키 값이 바뀌면 물리적 저장 위치도 바뀌어야한다
는 뜻입니다.B-Tree Insert, Delete, Update
리프 노드 분리(Split)
이 일어난다.스플릿 작업의 존재로 인해 쓰기 작업 비용이 비교적 크다
. 이것이 R을 위해 희생해야할 대표적인 비용이다.100% 일치
,전방 일치
,부등호 연산
에 인덱스가 사용됩니다.페이지
InnoDB 스토리지 엔진이 디스크에 데이터를 저장하는 기본 단위
디스크 I/O 최소 작업 단위
노드들도 페이지 단위로 구분
됩니다인덱스 키의 크기가 커지면
하나의 페이지에 담길 수 있는 수가 줄어듭니다.성능 저하로 귀결
됩니다여러 리프 노드에 걸쳐 조회를 하게 되면,
페이지 단위가 달라져서I/O 횟수가 증가
하게 되는 걸 알 수 있습니다.질문
관련 페이지
디스크 읽기 방식
인덱스란?
B-Tree 인덱스
클러스터링 인덱스