✅DB INDEX란?
- 테이블에 대한 검색의 속도를 높여주는 자료 구조
- 색인이고 메모리 영역의 일종의 목차를 생성하는 개념
- 따라서 이런 목차를 이용하여 검색 범위를 줄여 속도를 높일 수 있다
- 인덱스란 백과사전과 유사하며, 우리가 흔히 겪어본 Array와도 유사하다
✅INDEX의 종류?
- B(Balanced)-tree Index
- Bitmap Index
- IOT Index
- Clustered Index
위와 같이 존재하며 주로 B-tree 구조로 사용된다고 한다.
✅INDEX를 사용하는 이유?
만약 수십만개의 데이터가 들어있는 테이블의 데이터를 조회하는데 조회 기능이 자주 사용되는 서비스라면 성능이 굉장히 떨어지게 될것이다. 왼쪽과 같이 인덱스를 따로 생성하여 해당 데이터만 빠르게 찾을 수 있게 함!
✅INDEX 작동 원리?
B-tree 알고리즘을 통하여 조회하게 되고, 리프노드로 도착하기 까지 자식 노드에 대한 포인터가 저장되어 있어 탐색에 있어서 한개의 경로만 조회하면 되기 때문에 조회에 있어서 굉장히 효율적인 알고리즘이라고 한다.
✅INDEX 는 언제 사용해야 하는가?
주로 검색 및 조회를 할때 큰 효율성을 낼 수 있다
기본적으로 이진 트리를 사용하기 때문에 이미 정렬이 되어있는 상태에서 추가, 수정, 삭제가 자주 일어나게 되면 인덱스에서도 마찬가지로 해당 동작들이 수행되기 때문에 성능 저하를 초래할 수 있다.
즉 변동이 적고 조회가 잦은 DATA를 조회할 때 쓰면 비약적인 성능 개선이 가능하지만 인스타그램같은 소셜 서비스들은 끊임없이 게시글이 작성되고 수정, 삭제되기 때문에 오히려 인덱싱을 하게되면 성능이 저하된다.
✅DB INDEX 예시
#PostgreSQL Index Types 종류
1. B-Tree
2. Hash
3. Gist
4. SP-Gist
5. GIN
6. BRIN
✅오늘 알게된 점
우리 팀 프로젝트에서도 postgis를 이용해서 공간 indexing을 사용하려했는데 정확한 작동원리는 잘 모르고 있었던 것 같다. 오늘 db indexing을 더 자세히 공부하면서 왜, 어떻게 공간 indexing이 장소 조회 기능을 개선 시켜주는지 깨달았다.
대용량 데이터를 다루면서 계속해서 indexing의 개념이 등장했는데, 오늘 확실히 알게 되었고 무엇보다 indexing을 언제 써야하는지에 대한 개념이 잡혔다.
#PostGIS 는 공간데이터를 처리하기 위한 PostgreSQL의 확장 기능이며, 공간쿼리를 지원하고 공간 데이터를 '인덱싱'하여 효율적으로 검색할 수 있도록 한다. 즉 PostgreSQL과 PostGIS 를 사용해서 저장된 수많은 장소 데이터를 빠르게 검색하기 위해 인덱싱 하는 것.
PostGis에서 공간인덱스는 R-트리 인덱스와 Gist 인덱스와 같은 알고리즘을 사용하여 공간 데이터를 조직화 하고 검색한다.
✅참고자료
https://velog.io/@bsjp400/Database-DB-%EC%9D%B8%EB%8D%B1%EC%8B%B1Indexing%EC%9D%B4%EB%9E%80
'필수 개발지식 > CS' 카테고리의 다른 글
[CS] Database에서 정규화(Normalization)란? (0) | 2023.07.05 |
---|---|
[CS] 쓰레드와 쓰레드 풀 (0) | 2023.07.05 |
[CS] 프로세스 생명주기와 프로세스 메모리 (0) | 2023.06.17 |
[CS 지식] CPU와 메모리, 스케쥴링, 메모리, 자료구조 (0) | 2023.06.15 |
[자료구조] 레드-블랙 트리(Red-Black Tree)란? (0) | 2023.06.14 |