인덱스 설계 시 컬럼 선택 기준
안녕하세요. 강사님의 좋은 자료 덕분에 장고 강의에 이어 데이터베이스 설계 강의까지 함께하고 있는 수강생 입니다.
강의를 듣던 중, "22.선택도 / 3:51" 내용을 보고 의문점이 생겨 질문 남깁니다.
배경
선택도 값이 낮으면, 조건에 맞는 행이 적다 → 인덱스 효율이 증가한다.
선택도 값이 높으면, 조건에 맞는 행이 많다 → 인덱스 효율이 떨어진다.
라는 설명을 듣고, "중복이 적을수록 인덱스를 생성하면 더 효율적이겠구나" 라는 정보를 얻었습니다.
그 후, "어떤 컬럼을 선택해야 할까?" 장표에는 그중에서 선택성이 높은 컬럼 위주로 인덱스 생성
이 효율적이라고 설명과 더불어 자료를 보여주셔서 의문이 생겼습니다.
질문
Q. 선택성이 높으면 조건에 맞는 행이 많아 중복되는 행을 다시 스캔하여 필터링 하기 때문에 인덱스 사용에 비효율적이지 않을까요?
그럼 나머지 강의를 일단 수강하며 배움에 즐거움을 만끽하러 가보겠습니다.
감사합니다.
Câu trả lời 2
1
안녕하세요, 선택도와 선택성이라는 표현 때문에 오해가 생긴 것 같은데요.
"선택도가 낮다 = 조건에 맞는 행의 비율이 낮다(명확히 걸러진다) = 선택성이 높다" 라고 생각해주시면 됩니다.
0
안녕하세요, 인프런 AI 인턴입니다. 제로콜라 함 즐길까님.
인덱스를 설계할 때 선택성(selecitivity)은 중요한 기준입니다. 선택성이란 전체 행에서 특정 조건을 만족하는 행의 비율을 뜻합니다. 여기서 중요한 부분은 “선택성이 높은 컬럼”이라는 표현이 약간 오해의 소지가 있을 수 있다는 점입니다.
선택성 높은 컬럼 선택: 선택성이 높다거나 낮다는 표현이 상대적일 수 있습니다. 데이터베이스에서는 주로 선택성 낮은(즉, 조건을 충족하는 행의 수가 적은) 컬럼을 인덱스 효율을 높이기 위해 선택합니다. 이는 불필요한 행들을 최소한으로걸러내고, 원하는 데이터에 더 빠르게 접근할 수 있게 하기 위함입니다.
용어의 혼동 가능성: 선택성이 높다고 한다면, 전체 행 중 더 많은 행이 조건에 부합하는 것을 의미할 수 있지만, 일반적인 인덱스 설계시의 문맥에서는 ‘선택성이 높다’는 표현이 선택적(특정)일 수록 인덱스가 더 잘 작동하는 경향이 있다고 이해할 수 있습니다.
데이터의 성격에 따른 차이: 어떤 경우에는 선택성이 낮더라도(즉, 중복되는 데이터가 많더라도) 쿼리의 성능 향상을 위해 인덱스를 생성할 수 있습니다. 이는 특정 어플리케이션, 데이터 분포 및 사용 패턴에 따라 달라집니다.
관련하여 더 많은 정보를 원하시면 다음의 링크를 참고해 주세요: 데이터베이스 성능 최적화를 위한 인덱스 설계
질문에 대한 답변이 도움되셨길 바라며, 강의에서 더 많은 인사이트를 얻으시길 바랍니다. 추가적인 의문이나 궁금한 사항이 있으시면 언제든 질문해 주세요. 곧 지식공유자께서도 도움을 드릴 것입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
76강 2분33초 내용 오류
0
12
0
인덱스 강의 혹은 해당 강의 전 듣어야 하는 사전강의 문의
0
16
2
ordered_at, paid_at 과 같이
0
23
1
기본편 오타 제보 드립니다.
0
31
1
노션링크가 접근되지 않습니다.
0
32
1
Substack 신청 문의
0
32
2
개념과 격벽에 대한 이해를 팀과 공유하고 합의하는 방법
1
58
2
Boolean 컬럼 인덱스와 Cardinality에 따른 실행 계획에 대하여
1
52
1
Substack 1년 제공 문의
0
44
2
접근 가능한 카트 목록을 조회하는 API는 없는걸까요?
1
59
2
[실습] WHERE문이 사용된 SQL문 튜닝하기 - 2
0
51
2
JWT토큰 발급 시, subject 값을 다양하게 넣어서 여러 개의 토큰을 만드는 이유
0
44
2
[실습] 인덱스 직접 설정해보기/성능 측정해보기
0
53
2
관계도출부분 질문입니다.
0
36
1
docker 마지막 실습(app(flask) + mysql) 연동 과정
1
55
2
테스트 코드 작성 시 DTO 새로 작성하는 이유가 궁금합니다.
0
47
1
물리적 모델링 - 실습 (역정규화) 질문
0
48
2
「김영한의 실전 데이터베이스 - 성능 최적화」
0
57
2
설치 파일 실행 불가 및 압축 구조 문의
0
37
1
aws 관련 질문드립니다.
1
56
3
어플리케이션 실행 후 에러에 관하여 질문 드립니다.
2
60
2
커버링 인덱스에 대해서 질문드립니다.
0
161
3
인덱스 사용 패턴 질문
0
111
2
논리적 삭제 적용시 INDEX 생성 전략
0
138
2

