ABOUT
home
무료 콘텐츠
home
2️⃣

Index를 어떤 Column에 사용하는 것이 좋을까요?

[핵심 답변]
index는 where 절에서 자주 조회되고, 수정 빈도가 낮으며, 카디널리티는 높고, 선택도가 낮은 column을 선택해서 설정하는 것이 가장 좋습니다.
기준
적합성
카디널리티(Cardinality)
높을수록 적합 (데이터 중복이 적을수록 적합)
선택도(Selectivity)
낮을수록 적합
조회 활용도
높을수록 적합 (where 절에서 많이 사용되면 적합)
수정 빈도
낮을수록 적합
[면접  TIP]
index를 어떤 column에 대해서 생성하는 것이 좋을지에대한 판단 근거를 물어보는 면접 질문입니다. DB 질문으로 거의 무조건 나오는 질문입니다. 굉장히 중요하지만 내용은 그렇게 어렵지 않으니 확실히 준비해서 꼬꼬무 질문에도 잘 답변하시길 바랍니다. index를 사용하면 검색속도를 높이지만 추가 저장공간을 차지하고 데이터 업데이트시 속도가 느려지게 됩니다. 따라서 어떤 column에 index를 생성해야 하는지를 잘 학습하시기 바랍니다. 특히 몇 가지 예를 가져와서 이 경우에는 index 적용하는게 좋을까요? 안좋을까요? 라고 추가 질문을 종종 합니다. 꼬꼬무 질문을 참고해 주세요.

Index 효과적으로 사용하는 방법

SELECT WHERE절에 자주 사용되는 Column에 대해 index를 생성하는 것이 좋습니다.
데이터 수정 빈도가 낮을수록 적합합니다. insert / update / delete 작업 시, 데이터에 변화가 생기기 때문에 index에서는 매번 정렬을 다시 해야합니다. 이에 따른 부하가 발생하기 때문에 수정 빈도가 낮은 column을 index로 설정하면 좋습니다.
데이터의 중복이 높은 column은 index 효과가 별로 없습니다. 예를 들어 성별은 종류가 2 가지 밖에 없으므로 index를 생성하지 않는 것이 좋습니다. 즉, 선택도가 낮을 때 유리합니다.(보통 5~10% 이내)
데이터의 양이 많을 수록 index로 인한 성능향상이 더 큽니다. 데이터 양이 적다면 index의 혜택보단 손해가 더 클 수 있습니다.
Join 조건으로 자주 사용되는 column의 경우
한 table에 index가 너무 많은면 데이터 수정시 소요되는 시간이 너무 길어질 수 있습니다. (table당 4~5개 정도 권장)
[꼬꼬무 문답]
Q. index를 쓰면 성능이 좋아지니까 모든 컬럼에 인덱스를 사용하면 성능이 더 좋겠네요?
Q. 우리 회사의 고객 DB에서 성별 column에 index를 걸어주는 게 좋을까요?
Q. true 또는 false 값을 갖는 column에서, true 1%, false 99%의 비율로 구성된 상황에서는 index를 거는 게 좋을까요?