inflearn logo
강의

Course

Instructor

Kim Young-han’s Practical Database – Fundamentals Edition

Summary

68강 문제 풀이

3

thrkrif

4 asked

0

문제를 풀면서

66. 인덱스 설계 가이드 라인에서 카디널리티 이야기가 나왔던게 생각이 났습니다.


is_active는 값이 TRUE/FALSE 2개이므로 카디널리티가 낮을거라(중복도 높음) 생각했습니다.


그리하여 문제에서 주어진 쿼리를 보고 중간에서 is_active에서 풀 스캔 VS is_active 컬럼도 인덱스에 추가할지 고민이 되었습니다.


정답처럼 인덱스에 추가해주는게 더 나은 선택인걸까요?

음... 때에 따라 다른거 같기도 합니다! TRUE/FALSE의 비율 같은게 추가 조건으로 나왔더라면 선택하기 더 좋았을 거 같네요.

예를 들어, TRUE의 비율이 95% 다 이러면 인덱스를 달아주는 것과 풀 스캔이 별 차이가 없었을 거 같다는 생각이 드네요!

sql mysql dbms/rdbms SQLD

Answer 1

0

communityai8509

안녕하세요, 인프런 AI 인턴입니다. thrkrif님

TRUE/FALSE처럼 값의 종류가 적은 컬럼은 카디널리티가 낮아 단독 인덱스의 효율이 낮을 수 있습니다. 다만 실제 인덱스 사용 여부는 값의 분포, 전체 데이터 건수, 함께 조회하는 조건, 복합 인덱스의 선두 컬럼 여부 등에 따라 달라집니다.

예를 들어 is_active = TRUE인 데이터가 전체의 95%라면 인덱스를 사용해도 대부분의 데이터를 읽어야 하므로 풀 스캔이 더 효율적일 수 있습니다. 반대로 is_active = TRUE인 데이터가 소수이고, 다른 선택도가 높은 조건과 함께 복합 인덱스로 사용된다면 인덱스에 포함하는 것이 유리할 수 있습니다. 따라서 카디널리티만으로 결정하기보다는 실제 실행 계획과 데이터 분포를 함께 확인하는 것이 좋습니다.

관련 답변은 아래 게시글을 참고해 주세요.

Enum 관련 질문드립니다.

해당 답변에서도 OK, FAIL처럼 값이 단순한 컬럼은 인덱스 효과가 적을 수 있으며, 데이터 규모와 조회 조건을 함께 고려해야 한다고 설명하고 있습니다. 또한 문자열 대신 정수형을 사용하는 경우의 장단점과 인덱스 설계 시 고려할 점도 확인할 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

문제와 풀이2 1번문제

0

53

1

조인의 특징

0

82

2

76강 2분33초 내용 오류

0

78

2

기본편 오타 제보 드립니다.

0

91

2

드랍 테이블로 지운 ordes에 대해서 질문

0

79

1

문제 풀이 1번 질문

0

71

1

간단한 오타 제보입니다.

0

98

1

ON을 명시하지 않았을 경우 질문드립니다.

0

130

1

강의 2:53 union을썼는데도 션이 중복

0

110

1

where 대신 having을 써도 되나요?

2

150

1

주문 내역에 대한 고객 데이터

0

136

2

in 수행

0

94

1

외부조인1 강의 관련 질문

0

140

3

커버링 인덱스와 랜덤i/o 질문

0

124

1

오타인거죠?

0

124

1

섹션 3 퀴즈 3번 문제

0

137

2

GROUP BY 기준 컬럼

0

125

1

질문이 있습니다

0

98

1

오타

0

124

2

실제 상용 서비스 질문

0

137

1

파티셔닝 관련 질문입니다.

0

94

1

join 문제 풀이2 문제1(self join) 질문

0

118

1

9. 인덱스2.pdf 중에서

0

114

1

문제 2번

0

122

2