DB인덱스에 관한 부분에 대해서 알아보겠습니다.
이전에 기술면접 질문 중에 본 질문인데
DB인덱스는 왜 붙이는가? DB인덱스를 붙이는게 좋다면 왜 모든 테이블에 Index를 붙이지 않는가?
에 대해서 들어본 적이 있습니다. 이 질문에 대해 대답하기 곤란하시다면 아래의 글을 읽어보시면 좋을 것 같습니다.
자 우선은 index가 무엇인지 부터 직관적으로 알아봅시다.
위와 같이 서류정리함? 정도로 생각하시면 되는데, 각 분류마다 택을 붙여서 쉽게 찾아보게 만든 것이라고 생각하면 됩니다.
저 서류들을 1번부터 1000번까지 훑어서 찾는 것 보다, 저 데이터가 포함하는 인덱스로 가서 데이터를 찾는게 훨씬 더 좋습니다.
인덱스를 이용하면 얻는 장점으로는 당연히 전체데이터 훑기(full scan)보다 검색속도가 올라갑니다.
장점으로 정리해보면
- 테이블을 조회하는 속도와 성능 향상 가능
- 전반적인 시스템 부하를 줄일 수 있음
이라고 할 수 있을 것 같습니다.
그러면은 아 인덱스를 이용하면 편하고 좋구나 라고 알게 되었습니다. 근데 왜 모든 DB에 index를 사용하지 않는걸까요?
당연히 장점이 있는 것 만큼, 단점이 있습니다.
그러면 단점은 뭘까요? 단점으로는
- 인덱스를 관리하기 위해 DB의 10% 정도 해당되는 저장공간이 필요하다.
- 인덱스를 관리하기 위한 작업이 필요하다.
- 인덱스 잘못 사용할 경우 성능 저하의 원인이 된다.
그리고 생성(Create), 삭제(Delete), Update(수정)을 할 경우 문제가 생기기 시작합니다.
생성의 경우 잘 못 생성할 경우, 쿼리 속도가 느려질 수 있고, 삭제 수정의 경우 인덱스를 삭제하지 않고 사용하지 않는 형태로 관리하기 때문에, DB가 비대해져 성능 저하가 일어날 수 있습니다.
그러면 index를 사용하면 좋은 경우를 정리해보면
- 규모가 작지 않은 테이블
- Create, Update, Delete 가 자주 일어나지 않는 컬럼
- JOIN, WHERE, ORDER BY 에 자주 사용되는 컬럼
- 데이터의 중복도가 낮은 컬럼
이라고 정리해볼 수 있습니다.
Index의 자료구조는 해시테이블 or B+Tree가 사용됩니다.
index 찾아보다가 보면 PK라는 개념이 나옵니다.
PK(Primary Key)는 이름에서 볼 수 있듯이 행을 검색할 때 사용할 수 있는 고유한 키입니다.
한 테이블 내에 Row가 다른 Row와 구별되는 키값이라고 생각할 수 있습니다.
PK는 Row마다 유일해야 하며, NULL일 수 없고, 변경될 수 없어야 합니다.
여기까지 정리해보겠습니다.
참조
- https://www.youtube.com/watch?v=NkZ6r6z2pBg
https://mangkyu.tistory.com/96
'기술' 카테고리의 다른 글
프로토콜 버퍼란? (0) | 2022.12.01 |
---|---|
객체지향의 원칙 (0) | 2021.10.20 |
Heap Stack (0) | 2021.09.27 |
OSI 7 Layer (0) | 2021.08.24 |
프로세스(Process)와 쓰레드(Thread)의 차이 (0) | 2021.08.13 |