[PostgreSQL]인덱스에 대해 알아보자

모지리 개발자·2022년 9월 19일
0

database

목록 보기
1/2

이 책을 읽고 작성한 글입니다.

인덱스는 무엇일까?

인덱스는 한국어로 색인이라는 의미를 가지고 있습니다. 가끔 어떤 책들은 맨 뒷 페이지에 중요한 용어들을 모아 놓은 부분을 볼 수 있습니다. 이런 부분을 색인이라고 하는데 데이터베이스의 인덱스도 이와 비슷하게 데이터 속에서 중요한 부분을 따로 정리하여 쿼리 속도를 향상 시킵니다.

신문기사 수집과 인덱싱

신문기사 수집 과정의 비유를 통해 인덱스에 대해 더 잘 이해해보도록 하겠습니다.

흥미로운 신문 기사를 찾아서 쪽마다 번호가 있는 공책에 기사를 하나씩 모으는 취미를 가지고 있다고 생각해봅시다. 가끔씩은 이전에 보았던 기사를 찾기도 하는데, 이전에 모아 놓았던 기사를 찾기 위해서는 모든 페이지를 일일이 살펴보아야 했습니다. 처음에는 시간이 얼마 안걸려서 별로 문제가 되지 않았지만, 시간이 지나고 기사가 쌓여가면서 원하는 기사를 찾는데 많은 시간이 소요되었습니다.

그래서 더 좋은 방법을 찾았습니다. 바로 색인을 만드는 것입니다.
우선 간단하게 제목과 쪽수를 적은 색인을 만들어보았습니다.

  • 국내 체류 외국인, 건보료 체납 때 의료비 전액 본인 부담 | 32
  • 과민성 장 증후군, 소변 검사로 진단 | 55
  • 과천시, 관악산, 청계산 생태길 정비사업 추진 | 91

위와 같이 제목을 가나다 순으로 배치한 색인을 만들어보았습니다. 제목을 알고있거나 첫 단어라도 알고있다면 이전보다 더 빠르게 원하는 기사를 찾을 수 있게 되었습니다. 이전에는 제목을 알고 있어도 페이지를 넘기며 모든 정보를 짧게라도 살펴봐야했지만 이제 색인 안에서 해결할 수 있습니다.

또 다른 문제 발생

제목을 알고 있는 기사를 찾는다면 문제가 없지만, 일반적인 경우 제목보다는 어떤 종류의 기사인지만 알고 싶은 경우가 많았습니다. 예를 들어 경제에 대한 기사를 찾고자 할 때는 제목만으로 기사의 종류를 구분하기 어려웠기 때문에 다시 모든 기사를 하나하나 살펴서 찾아야했습니다. 그래서 기사의 분류에 따라 색인을 하나 더 만들어봤습니다.

  • 경제 | 1,10,67...
  • 사회 | 4,32,56,91...
  • 과학 | 3,55,88...
  • ...

이런 방식으로 찾기 원하는 정보에 맞춰 색인을 만들면 더 빠르게 원하는 기사를 찾아 볼 수 있습니다.
근데 만약 과학 분야의 기사 중에서 "스마트폰" 이라는 단어로 시작하는 기사를 더 빨리 찾고 싶다면 어떻게 해야할까요? 위에서 만든 2가지 색인을 모두 가지고 있다해도 결국 하나의 색인만을 사용해야합니다.
1. 제목을 가나다 순으로 정렬한 색인에서 스마트폰으로 시작하는 기사를 고른 뒤, 하나하나 과학 분류에 속하는지 확인한다.
2. 분류 색인에 과학 분류에 속한 기사를 하나하나 페이지를 펼쳐서 제목을 확인한다.

복합 색인 만들기

만약 두 가지 색인을 하나로 합칠 수 있다면 어떨까요?

  • 경제
    • 비트코인 반감기에 쏠리는 기대감..분석가 "바닥쳤다" 확신 | 1
    • 버핏의 아내 위한 유언장엔.. 인덱스 펀드에 90% 투자하라 | 10
    • 산업 은행 200억 투자한 '화승', 분식회계 의혹 | 67
  • 과학
    • 과민성 장 증후군, 소변검사로 진단 | 55
    • 스마트폰 방수 기능 믿지마세요..."침수 시 기본 유상수리" | 3
    • 파리협약으로도 북극 빙하 상실 막을 수 없다 | 88
  • ....

분류-제목 색인을 만들어봤습니다. 이전에 만든 색인이 단순 색인 이었다면 이번에는 두가지 항목을 이용한 복합 색인을 만들었습니다.
그리고 복합 색인을 만들면서 2가지 사실을 알게되었습니다.
1. 분류-제목 색인이 있다면 더 이상 분류만을 기준으로 한 색인이 필요가 없었다.
2. 분류-제목 색인과 제목-분류 색인은 다르다.

이처럼 복합 색인을 만들 때에는 어떤 정보를 기준으로 먼저 묶을지가 중요합니다. 특히 먼저 묶는 정보가 더 큰 범위를 포괄하고 있을 경우 유용합니다.

하지만
색인을 만들고 새로운 기사를 추가할 때마다 이전에는 하지 않았던 작업을 추가적으로 해야했습니다.
바로 색인에 방금 추가한 기사의 정보를 업데이트 하는 작업입니다.
색인을 업데이트 하는 작업이 귀찮았지만 기사의 내용을 찾을 때가 기사를 추가할 때보다 더 빈번했기 때문에 기꺼이 매번 색인을 업데이트 했습니다.

인덱스의 특징

위에서의 비유는 데이터 베이스 인덱스의 많은 특징을 내포합니다.
신문 기사를 테이블의 로우, 생성한 색인을 인덱스에 대입해 생각하면 다음과 같은 인덱스의 기본 특징을 추론할 수 있습니다.

  • 쿼리를 수행할 때 인덱스가 없다면 모든 로우를 일일이 조회해야한다. 인덱스는 쿼리 작업을 매우 효율적으로 만든다.
  • 하지만 인덱스를 만들면 새로운 로우를 생성하거나 제거하는 작업을 빈번하게 할 때 속도의 저하가 일어날 수 있다. 매번 인덱스를 업데이트 해야하기 때문이다.
  • 단순 인덱스(단순 색인)을 만들면 해당 칼럼만 조회할 때 사용할 수 있고, 다수의 컬럼을 대상으로 조회를 할 때는 복합 인덱스(복합 색인)이 효율적이다.
  • a-b 복합인덱스는 a 단순인덱스와 같은 기능을 하기 때문에 대체할 수 있다.

결론

신문기사 수집의 비유를 통해 인덱스의 개념에 대해 알아보았습니다. 인덱스는 데이터베이스를 공부할 때 상당히 중요한 개념이므로 제대로 이해하고 쓰는게 좋습니다!

제가 잘못이해하고 있거나 잘못 작성한 부분이 있다면 지적, 비판, 피드백 뭐든 해주시면 감사하겠습니다!

profile
항상 부족하다 생각하며 발전하겠습니다.

0개의 댓글