복합 index 문의
안녕하세요, 강의 잘 듣고 있습니다.
04 페이징 쿼리 작성 강의 > 데이터 개수 기반 방식 (동등 조건 사용 시) (9:36 부근) 에 나온 예시에 대한 질문입니다.
KEY index_userid_id (user_id, id)로 인덱스가 있는데요, user_id +id 가 아닌, user_id만 인덱스로 걸어도 N회차 쿼리가 잘 동작 할까요?
where 절에 user_id, id를 사용하고, ORDER BY 에 id가 있기 때문에 user_id + id 인덱스가 필요한 걸까요?
조금 더 자세히 알려주시면 감사하겠습니다.
답변 2
1
안녕하세요.
페이징에서 user_id 컬럼 뿐만 아니라 id 컬럼을 추가해서 복합 인덱스를 생성하는 것은, 중복된 user_id로 인해서 중간에 레코드가 짤리는 경우를 피하기 위해서 id 컬럼을 마지막에 추가한 것입니다. 아래와 같은 경우를 고려해보시면, 중간에 데이터가 사라지는 현상이 생길 수 있다는 것을 예상하실 수 있을 거에요. (첫번째 페이지의 마지막 user_id='esther' 일때, 다음 페이지는 user_id>'esther' 조건으로 검색해야 하는데, 이때 id = 11 인 레코드는 건너 뛸 위험이 있는거죠.
user_id id
-------------
esther 9
esther 10
esther 11
matt 12
-------------
만약 user_id 가 중복이 없다면 (UNIQUE 하다면), 굳이 id 컬럼을 마지막에 추가하지 않고 user_id 컬럼만으로 인덱스를 생성해도 될듯 합니다.
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다.
rex님께서 질문하신 내용은 인덱스 최적화와 관련된 사항입니다.
복합 인덱스(KEY index_userid_id (user_id, id))는 WHERE 절과 ORDER BY 절에 사용된 컬럼과 가장 일치하는 형태가 될 때 최적의 성능을 발휘합니다.
user_id만 인덱스로 걸어도 N회차 쿼리가 제대로 동작하는가?
- 경우에 따라 다르지만 일반적으로 복합 인덱스가 아닌
user_id단일 인덱스를 사용하는 경우,ORDER BY id조건을 만족시키기 위해 추가적인 정렬 작업이 필요할 수 있습니다. 특히user_id가 동일한 여러 행을id순으로 정렬해야 하는 경우에 성능 이점이 제한될 수 있습니다.
- 경우에 따라 다르지만 일반적으로 복합 인덱스가 아닌
user_id + id 인덱스가 필요한 이유
WHERE절에user_id와id가 사용되고,ORDER BY절에id가 있는 상황에서는 복합 인덱스를 사용하여 질의 성능을 향상시킬 수 있습니다. 이는 전체적인 데이터 스캔을 줄이고, 이미 정렬된 상태로 데이터를 검색할 수 있도록 해주기 때문입니다.
따라서, 주어진 사용 사례에서는 user_id, id에 대한 복합 인덱스를 사용하는 것이 더 효율적인 전략이 될 것입니다. 이는 쿼리의 실행 계획을 통해 실제 성능을 비교하여 결정할 수 있습니다.
추가적인 도움이 필요하시다면 또 질문해 주세요.
이미지 URL: index explanation
Origin URL: Spring Data JPA Documentation
Commit 응답받기 전 네트워크 문제가 발생하면
1
63
1
14분44초에 쿼리 질문드립니다.
0
71
2
ep12. (2) LEFT JOIN 사용 방법 준수 - 오타 질문
0
75
2
ep.12 count(*) 질문
0
67
2
레코드 수정시 저장공간이 부족하면
0
81
2
강의
0
82
1
LEFT JOIN 시 드라이빙 테이블을 왜 ALL로 읽나요?
0
106
2
GAP 락에 대한 질문 드립니닷..!
0
194
1
ORDER BY가 필요한 이유
0
177
2
[오타 제보] 선행 데이터를 기반으로 한 데이터 분석
0
165
1
2강. VARCHAR(255) 저장되는 데이터의 길이 정보 질문
0
448
2
LIMIT, OFFSET을 사용하는 것과 범위 기반 방식의 성능 차이
0
319
2
MySQL Where절 내 조건의 순서
0
393
2
1강. delete marking된 데이터의 정리 주기는 어느 정도인가요?
0
238
2
Mysql table avg_row_length
0
144
1
12강 FULL GROUP BY
0
135
2
ep11) Prepared Statement에서 질문
0
145
2
7)select for update 강의에서 질문
0
229
2
12강. LEFT JOIN 사용 방법 준수 5:42
0
239
2
6강. Top N 데이터 조회와 관련해 질문있습니다.
0
195
2
5강에서 사례로 언급하신 DETERMINISTIC 예제에 대해 질문있습니다.
0
145
1
deternmistic 질문
0
174
2
1강 CHAR타입에 대해 질문드립니다
0
230
1
EXPLAIN ANALYZE 수행 시 쿼리 실행 계획이 예상과 다릅니다.
0
251
1





