복합인덱스 설계 질문
32
1 câu hỏi đã được viết
안녕하세요 영한님, 영한님의 강의로 열심히 학습중인 학생입니다!
실전 진단 - 해결 방안2에서 복합인덱스 관련해 궁금증이 있습니다.
영한님의 강의에서는 (category_id, product_status, created_at)을 복합인덱스로 설정하셨는데, (category_id, created_at)을 복합인덱스로 설정하는 것에 대해서는 어떻게 생각하시는지 궁금합니다.
product_status = 'ACTIVE'의 비율이 전체 테이블에 비교했을 때 전체의 85%였고, 이 price 조건을 비교하기 위해 클러스터드 인덱스가 접근해 행 전체를 읽은 후 실행엔진에서 걸러야하는데, product_stauts = 'ACTIVE' 비율이 85%에 해당되기 때문에 높은 확률로 통과하다 보니 인덱스 효용이 떨어질 것 같다는 생각이 들었습니다.
그래서 해당 쿼리를 생각했을 때 product_status도 복합인덱스에 추가할만한 가치가 있을까? 라는 질문을 던졌을 때 (영한님이 말씀해주신 것 처럼, 인덱스도 결국 비용이니깐) 크게 와닿지 못 했는데, 이와 관련해서 영한님의 의견이 궁금합니다!
(두 복합 인덱스의 실행 계획)
-- (category_id, created_at)
-> Limit: 20 row(s)
(cost=75331 rows=20)(actual time=0.719..11.5 rows=20 loops=1)
-> Filter: ((product.price between 10000 and 50000) and (product.product_status = 'ACTIVE'))
(cost=75331 rows=4595) (actual time=0.718..11.5 rows=20 loops=1)
-> Index lookup on product using idx_category_created_at (category_id=11)
(cost=75331 rows=413612) (actual time=0.698..11.4 rows=48 loops=1)
-- (category_id, product_status, created_at)
-> Limit: 20 row(s)
(cost=78697 rows=20)(actual time=0.6..9.07 rows=20 loops=1)
-> Filter: (product.price between 10000 and 50000)
(cost=78697 rows=38255) (actual time=0.593..9.06 rows=20 loops=1)
-> Index lookup on product using idx_category_status_created_at (category_id=11, product_status='ACTIVE')
(cost=78697 rows=344330) (actual time=0.581..9.03 rows=40 loops=1)
Câu trả lời 1
1
안녕하세요. 이성우님
말씀하신 것처럼 product_status = 'ACTIVE' 비율이 85%라면 선택도가 낮기 때문에, (category_id, product_status, created_at)으로 확장했을 때 얻는 이득은 크지 않을 수 있습니다.
실행 결과에서도 48건 → 40건으로 줄어드는 정도이니까요.
그래서 이 정도라면 (category_id, created_at)만 사용하는 것도 충분히 합리적인 선택입니다. 인덱스도 저장 공간과 변경 비용이 있기 때문입니다.
다만 판단할 때는 전체 테이블의 ACTIVE 비율보다 해당 category_id 내부에서 ACTIVE 비율이 얼마나 되는지를 보는 것이 더 중요합니다.
결국 두 인덱스 모두 가능한 선택이고, 실제 데이터 분포와 쿼리 빈도, 성능 차이를 측정해서 결정하는 것이 가장 좋습니다.
감사합니다 :)
build 시 에러 해결방법 공유(docker.desktop 업데이트 -> 의존성 버전 수정)
0
9
1
실습 데이터(PostgreSQL 백업 파일) 관련하여 문의드립니다. (Hive 환경 실습)
0
9
1
sakila 실전 17번 문제
0
12
1
수강 완료한 강의 수료증 어떻게 받나요?
0
12
1
ArticleReadService 관련 질문
0
26
1
마스터패스...
0
35
1
kafka 이벤트 발행 실패 시 at-least-once를 보장하는 방법이 궁금합니다.
1
59
1
SubStack 신청 완료했습니다!
0
22
2
domain에 @Entity 와 Repository를 함께 둔 이유가 궁금합니다
1
43
1
노드
0
32
1
아무도 모르게 책 내시면 모르실 줄 알고!!
1
48
2
Jib 이미지 빌드에서 docker credential 관련으로 이슈가 있다면
1
71
1
스크립트에 대해 질문 있습니다.
1
58
1
같은 사용자가 연속된 중복 호출할 경우 어떻게 되는지 궁금합니다!
2
70
1
리뷰
0
43
2
조건 검색 질문
0
39
1
이진 트리 노드
0
48
1
통계정보 갱신 질문
0
69
2
PK 관련하여 궁금한 점이 있어서 질문 드립니다.
0
75
2
탐색을 한번 더 하지 않게 하는 방식 중 어댑티브 해시 방식도 맞는지 궁금 합니다.
0
74
2
컬럼 크기가 대용량인 경우 DB 버퍼 풀에 전부 올라오는지 궁금합니다
0
69
2
실습데이터 ORDERS 생성 시간 질문요...
0
101
3
MySQL 서버구조 쿼리파서 질문 있습니다 !
0
73
1
Postgresql 아키텍처 업데이트
1
90
2

