강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

ybs1121님의 프로필 이미지
ybs1121

작성한 질문수

김영한의 실전 데이터베이스 - 기본편

인덱스와 정렬

인덱스 사용에 대한 질문이 있습니다!

작성

·

34

0

MySQL 8.x 버전에서 다음과 같이 두 개의 인덱스를 생성했습니다.

CREATE INDEX idx_items_price ON items (price); 
CREATE INDEX idx_items_price2 ON items (price DESC); 

 

이 상태에서 아래 쿼리를 실행하면,

SELECT *
FROM items
WHERE price BETWEEN 50000 AND 100000
ORDER BY price DESC;

처음에는 possible_keys에 두 인덱스가 모두 나타나고, 옵티마이저가 idx_items_price (오름차순 인덱스)를 backward index scan으로 사용합니다. 이후에는 몇 번 실행 후에는 possible_keys에 idx_items_price2 (내림차순 인덱스)만 나타나고 이 인덱스가 쿼리에 사용됩니다.

이런 현상이 발생하는 원인이 옵티마이저가 통계 정보를 수집하고 점차 최적화되어 인덱스 선택이 변경되는 것인지 궁금합니다. 그리고 한 번 최적화가 이루어진 후에는 idx_items_price2 인덱스를 계속 사용하는 것이 보장되는지, 아니면 나중에 다시 변경될 가능성도 있는지도 알고 싶습니다.

답변 1

0

안녕하세요. ybs1121님, 공식 서포터즈 David입니다.

일반적으로 옵티마이저는 통계를 기반으로 적절한 인덱스를 사용하게 됩니다.

통계 정보가 변하였고 이를 옵티마이저가 반영하여 인덱스 대상이 좁혀진 것으로 보입니다.

옵티마이저가 판단하기에 인덱스 대상이 변해야 하는 (통계적으로) 유의미한 변화가 있다면 이를 반영하게 될 것입니다.

감사합니다.

ybs1121님의 프로필 이미지
ybs1121

작성한 질문수

질문하기