아래와 같은 쿼리 1, 2 가 있다면
1. ~~ where a = 1
2. ~~ where a= 1 and b=2
이럴때 보통 인덱스를 a와 b 를 각각 별도의 인덱스로 만드는게 정석인지,
아니면 a와 b를 같이 뭉쳐서 인덱스화 시키는게 정석인지 궁금하여 문의드립니다.
CREATE INDEX indexName ON table(
A, B
);
와 같이 하여 말씀하신 두 개의 경우 모두 처리가 가능하도록 하는 것이 보통입니다.
"보통" 위와 같은 경우에는 B컬럼에는 인덱스를 생성하지 않습니다.
B컬럼에 인덱스를 생성하는 것은 B가 매우 선택도가 좋거나 오라클에서 index merge 등이 사용될 수 있는 경우 등이 있겠으나... 여기서 설명드리기에는 너무 오바스러우니 패스합니다.
A컬럼의 선택도(selectivity)가 매우 좋거나 B컬럼의 type이 크다면
A
)
INCLUDE(
B
와 같이 하는 편이 더 나은 성능을 보일 수 있는 등 실제 데이터의 분포나 형태 등도 고려하여 결정하는 것이 바람직합니다.