인덱스 혼자 끄적이기

반응형

언제 인덱스를 거는 것이 좋을까?

책에 있는 인덱스를 생각해보면 인덱스는 A~Z 혹은 ㄱ~ㅎ으로 되어 있다.
만약 인덱스가 뒤죽박죽이라면 책에서 정보를 쉽게 찾을 수 없을 거다.
고로 인덱스를 건다는 건 어떤 의미일까 데이터를 쉽게 찾는다는 소리인데
그게 뒤죽박죽 되어 있다면 의미가 없지 않을까 생각이 문득 들었다.

보통 정보를 찾을때, 큰 정보 -> 중간 -> 작은 순서대로 정보를 찾는다.
그래야 리소스를 최대한 줄일 수 있기 때문이다.
카더널리티가 작은곳에 많다고 해서 작은곳에만 인덱스를 걸면 절대 안된다.
아니 의미가 없다.
왜냐하면 큰곳에서 데이터를 뒤지고 작은곳을 뒤져야 하는데
어차피 큰 곳은 인덱스가 걸리지 않았다.
그렇담 인덱스는 안 탈거고 의미가 없지 않을까?

어찌 되었든 인덱스를 걸려면 어떤 데이터로 가장 먼저 조회가 되는지 생각해봐야 하는거 같다.
그래야 인덱스를 타지 않을까?

우리가 어떤 도시의 도서관에서 어떤 책을 찾아야 한다고 생각해보자.
특정 책은 한 권이다. 이게 카디널리티가 1이라는 뜻이 된다. 
이 한권을 찾기 위해서 어떻게 해야할까?
지금이야 인터넷에 그냥 책 제목만 적으면 되겠지만 만약 없다고 가정하게 된다면
근처의 도서관에 그 책이 있는지 뒤져야 할거다.
하지만 그렇게 해서는 의미가 없다. 책에 인덱싱이 걸려 있다고 한들 어찌하여 그 책을 찾을 수 있을까?

우리나라에는 1,296개관에 달하는 어마 무시무시한 도서관이 존재한다.
그 책이 전국에 딱 한 권있다면, 이 도서관들을 전부 방문해야 할까? 도서관에 가는데 최소 10분이 걸린다고 가정해보고
도시와 도시에 거리는 일단 없다고 생각해도 12960분이라는 어마 무시무시한 시간이 나온다.
* 시간이 되는 분들은 시간으로 환산해보자.
그러면 우리는 도서관 책 으로 인덱싱을 걸어야 할거다.

하지만 우리나라에는 1296개가 되는 도서관이 존재하고 이 도서관들은 어느 도시에 있는지는 모른다.
그렇기 때문에 도시들도 찾아야 한다.
도시는 전국에 85개나 있다고 한다.
고로 책 한권을 찾기 위해서 다음과 같은 인덱스를 설정해야 한다.

도시, 도서관, 책

이렇게 한다면 원하는 책을 찾을 수 있을거다.
단순하게 카디널리티가 많은건 도서관이지만 도서관에 인덱싱을 걸게 되면

도서관 도시 책이 되는데

도서관을 찾았는데 도시를 찾는건 어떤 의미가 있을까?

마지막으로 위에서 말했듯이 정렬이 되게 중요한데 정렬이 중요한 이유는 무작위로 되어 있다면
책에서 특정 정보를 찾는것이 어렵듯이 
무작위로 되어 있다면 힘들지 않을까?

더 나아가면 각 DB(mysql, postgre...)에서 정렬을 어떻게 사용하는지도 학습할 수 있을거 같다.

이제 테이블 하나인 경우를 해봤다.
그럼 만약에 테이블이 두개 이상이라면, 인덱싱을 어떻게 거는것이 좋을까?
도시 정보, 도서관, 책에 대한 정보들이 각각 테이블로 존재한다고 해보자.
그러면 똑같이 도시 테이블에서 인덱싱을 걸고
도서관은 도시 + 도서관으로 걸고
책은 도서관 + 책으로 인덱싱을 걸면 되지 않을까 생각이 든다.

고로 인덱싱을 걸때 그 정보를 어떻게 표현할 수 있을지 고민하는게 우선인거 같다.
카디널리티가 많은 순서는 그 다음이지 않을까 생각이 든다.
만약, A칼럼과 B칼럼이 우선순위가 같고 B칼럼의 카디널리티가 더 많다라고 한다면 B칼럼을 먼저 조지는게 좋다.
왜냐하면 많은거 부터 조져놔야 갯수를 최대한으로 줄일 수 있기 때문이다.

그냥 인덱스에 대해 혼자 끄적여봤습니다.~~
재밌게 읽어주셔서 감사합니다~~

'루퍼스 > 5주차' 카테고리의 다른 글

WIL  (2) 2025.08.17
기존 테스트..  (4) 2025.08.15
어떤 방법으로 성능 개선하는것이 좋을까?  (5) 2025.08.15

댓글

Designed by JB FACTORY