• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    해결됨

복합 스플릿에서 3개 이상의 칼럼을 인덱스 설정하는 경우

21.06.19 11:38 작성 조회수 129

1

복합 스플릿에서 3개 이상의 칼럼을 인덱스 설정하는 경우,

예를 들어 A,B,C를 걸었을 경우에 A만 검색할 때 2개의 칼럼에만 인덱스를 설정했을 때처럼 따로 A만 인덱스를 생성할 필요는 없지만, B,C의 경우에 각각을 검색해야할 때 각각 또 설정해줘야하나요?

이전에 Clustered가 영한 사전 형식으로 정렬이 되어있다고 하셨습니다. 이번 강의에서 인덱스를 걸면 Non-Clustered였는데, 복합 인덱스 순서에 관해 주의사항을 언급하실 때 페이지의 데이터가 정렬이 되어있었는데, 이 부분은 Non-Clustered이거나 Clustered이거나 모두 동일하게 정렬이 되나요?

답변 1

답변을 작성해보세요.

3

예를 들어 A,B,C를 걸었을 경우에 A만 검색할 때 2개의 칼럼에만 인덱스를 설정했을 때처럼 따로 A만 인덱스를 생성할 필요는 없지만, B,C의 경우에 각각을 검색해야할 때 각각 또 설정해줘야하나요?

맞습니다. B,C만 검색할 경우 A를 사용하지 않기에 전혀 효과를 볼 수 없습니다.

이는 Clustered/Non-Clustered 상관없이 모두에 해당하는 내용입니다.
Non-Clustered라면 실제 데이터가 그 순서로 정렬된 것은 아니고,
별도의 (탐색 트리) 테이블이 만들어지는 차이는 있겠죠.

복합 인덱스에 대해 이해하려면, 본인이 DB 개발자라면 어떻게 구현할지 생각해보면 됩니다.
가령 A, B가 모두 정수 타입이고 A->B 순서로 복합 Clustered 인덱스를 걸었다면
모든 데이터가 A 순서로 정렬되고, A가 동일한 경우에 한해 B 순서를 참고하겠죠.
ex. (A=100, B=4), (A=100, B=2), (A=200, B=3) 이렇게 3개의 데이터가 있다면,
A=100, B=2
A=100, B=4
A=200, B=3
순서로 데이터가 저장될 것입니다.
이 때 A를 건너 뛰고 B로만 조건을 주고 검색한다면,
애당초 B의 순서는 A가 동일한 경우에만 서로 정렬되어 있기에
전체 데이터 기준으로는 전혀 알 수가 없게 됩니다.