inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

실전! 데이터베이스 완전정복 [설계편]

선택도(Selectivity)

인덱스 설계 시 컬럼 선택 기준

해결된 질문

97

제로콜라 함 즐길까

작성한 질문수 7

0

안녕하세요. 강사님의 좋은 자료 덕분에 장고 강의에 이어 데이터베이스 설계 강의까지 함께하고 있는 수강생 입니다.

 

강의를 듣던 중, "22.선택도 / 3:51" 내용을 보고 의문점이 생겨 질문 남깁니다.

 

배경

라는 설명을 듣고, "중복이 적을수록 인덱스를 생성하면 더 효율적이겠구나" 라는 정보를 얻었습니다.

 

그 후, "어떤 컬럼을 선택해야 할까?" 장표에는 그중에서 선택성이 높은 컬럼 위주로 인덱스 생성

이 효율적이라고 설명과 더불어 자료를 보여주셔서 의문이 생겼습니다.

 

질문

Q. 선택성이 높으면 조건에 맞는 행이 많아 중복되는 행을 다시 스캔하여 필터링 하기 때문에 인덱스 사용에 비효율적이지 않을까요?

 

그럼 나머지 강의를 일단 수강하며 배움에 즐거움을 만끽하러 가보겠습니다.

 

감사합니다.

 

mysql dbms/rdbms database modeling db 카카오공채-개발

답변 2

1

신동현

안녕하세요, 선택도와 선택성이라는 표현 때문에 오해가 생긴 것 같은데요.

"선택도가 낮다 = 조건에 맞는 행의 비율이 낮다(명확히 걸러진다) = 선택성이 높다" 라고 생각해주시면 됩니다.

0

제로콜라 함 즐길까

감사합니다.

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. 제로콜라 함 즐길까님.

인덱스를 설계할 때 선택성(selecitivity)은 중요한 기준입니다. 선택성이란 전체 행에서 특정 조건을 만족하는 행의 비율을 뜻합니다. 여기서 중요한 부분은 “선택성이 높은 컬럼”이라는 표현이 약간 오해의 소지가 있을 수 있다는 점입니다.

  1. 선택성 높은 컬럼 선택: 선택성이 높다거나 낮다는 표현이 상대적일 수 있습니다. 데이터베이스에서는 주로 선택성 낮은(즉, 조건을 충족하는 행의 수가 적은) 컬럼을 인덱스 효율을 높이기 위해 선택합니다. 이는 불필요한 행들을 최소한으로걸러내고, 원하는 데이터에 더 빠르게 접근할 수 있게 하기 위함입니다.

  2. 용어의 혼동 가능성: 선택성이 높다고 한다면, 전체 행 중 더 많은 행이 조건에 부합하는 것을 의미할 수 있지만, 일반적인 인덱스 설계시의 문맥에서는 ‘선택성이 높다’는 표현이 선택적(특정)일 수록 인덱스가 더 잘 작동하는 경향이 있다고 이해할 수 있습니다.

  3. 데이터의 성격에 따른 차이: 어떤 경우에는 선택성이 낮더라도(즉, 중복되는 데이터가 많더라도) 쿼리의 성능 향상을 위해 인덱스를 생성할 수 있습니다. 이는 특정 어플리케이션, 데이터 분포 및 사용 패턴에 따라 달라집니다.

관련하여 더 많은 정보를 원하시면 다음의 링크를 참고해 주세요: 데이터베이스 성능 최적화를 위한 인덱스 설계

질문에 대한 답변이 도움되셨길 바라며, 강의에서 더 많은 인사이트를 얻으시길 바랍니다. 추가적인 의문이나 궁금한 사항이 있으시면 언제든 질문해 주세요. 곧 지식공유자께서도 도움을 드릴 것입니다.

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

간단한 오타 제보입니다.

0

1

0

큰 범위 조회 시 EXPLAIN의 rows 값이 정확하지 않은 이유가 궁금합니다.

0

15

1

실제 FK제약조건을 설정하지 않는이유

0

18

1

조회속도 개선에서 더 개선하는 방법이 궁금합니다.

0

20

2

Sequence 관련 질문

1

26

2

Image Only Query

1

24

2

라이브 운영중인 환경의 테이블에 인덱스 추가시 고려사항

0

29

2

JPA Repository 질문이 있습니다!

1

32

2

페이지네이션 처리를 쿼리에서 하는 방식 질문

1

35

1

비동기 스레드풀 분리 이유와 Virtual Thread 전환 시 고려사항

0

33

1

수강기간 연장

0

25

1

25년 3회 1번 문제

0

37

2

Build 관련 문제 (테스트 관련 문제)

0

41

2

25년 2회 8~11 3:14

0

30

2

다양한 관점의 코드 경험을 위해 개선하지 않은 코드

1

46

1

BCNF 질문

0

46

2

consumer에서 에러가 발생할 경우 데이터 유실 문의

0

35

2

게시글 테스트 데이터 삽입

0

43

2

Orchestration SAGA 패턴 보상에 대한 질문입니다.

0

49

2

연관 엔티티 네이밍 규칙

0

39

1

6강 - 해시태그 모델의 샤딩 전략에 대하여, 분산 정도(데이터 편중)와 트랜잭션 성능의 trade off 상황 발생 시에 대한 고민

0

36

2

커버링 인덱스에 대해서 질문드립니다.

0

92

3

인덱스 사용 패턴 질문

0

78

2

논리적 삭제 적용시 INDEX 생성 전략

0

106

2