복합인덱스 정렬
안녕하세요. 강의를 잘 듣고 있는 수강생입니다.
강의를 듣다가 좀 다른 결일 수도 있는 궁금증이 있습니다.
범위기반 데이터 조회에 아래 예시에서 order by finished_at, id 부분에서 finished_at이 범위검색 쿼리로 들어가는데 이런 경우 뒤에 있는 id는 인덱스를 타지 않는 것으로 알고 있습니다. 그럼 id로 범위 검색하려고 하면 finished_at으로 검색된 범위 안 전체 데이터를 전부 스캔하게 되나요?
select * from payments where finished_at ≥ ‘시작날짜’ and finished_at < ‘종료날짜’ and id > 8 order by finished_at, id limit 30
Câu trả lời 1
0
안녕하세요.
테이블에 (finished_at, id)로 구성된 인덱스가 있다고 가정했을 때, 공유해주신 쿼리가 실행되면 인덱스 데이터에서 finished_at이 '시작날짜' 값 이상인 데이터들을 쭉 스캔하면서 id > 8인 데이터들을 확인하고 이렇게 확인된 데이터가 LIMIT 절에 주어진 30건을 만족하면 쿼리는 종료됩니다.
LIMIT 절이 주어지지 않으면 말씀하신 것처럼 기본적으로 finished_at 컬럼에 주어진 조건 범위로 인덱스 데이터를 전부 스캔할 것으로 예상합니다. 쭉 스캔하면서 id 컬럼에 주어진 조건을 만족하는지 추가로 확인하게 됩니다.
그리고 이러한 동작 방식은 id 컬럼에 대한 조건이 범위 조건이 아니고 동등조건이라 하더라도, 인덱스의 선두 컬럼인 finished_at 컬럼에 대해 범위 조건이 주어졌기 때문에 동일하게 동작합니다.
그럼 추가로 궁금한 부분 있으시면 다시 말씀해주세요.
감사합니다.
Commit 응답받기 전 네트워크 문제가 발생하면
1
64
1
14분44초에 쿼리 질문드립니다.
0
73
2
ep12. (2) LEFT JOIN 사용 방법 준수 - 오타 질문
0
75
2
ep.12 count(*) 질문
0
67
2
레코드 수정시 저장공간이 부족하면
0
81
2
복합 index 문의
0
87
2
강의
0
82
1
LEFT JOIN 시 드라이빙 테이블을 왜 ALL로 읽나요?
0
107
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
240
2
6강. Top N 데이터 조회와 관련해 질문있습니다.
0
195
2
5강에서 사례로 언급하신 DETERMINISTIC 예제에 대해 질문있습니다.
0
145
1
deternmistic 질문
0
174
2
1강 CHAR타입에 대해 질문드립니다
0
230
1

