inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

인덱스와 정렬

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

81

ybs1121

작성한 질문수 7

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 인덱스를 계속 사용하는 것이 보장되는지, 아니면 나중에 다시 변경될 가능성도 있는지도 알고 싶습니다.

sql mysql dbms/rdbms SQLD

답변 1

0

David

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

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

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

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

감사합니다.

드랍 테이블로 지운 ordes에 대해서 질문

0

23

1

문제 풀이 1번 질문

0

29

1

간단한 오타 제보입니다.

0

69

1

ON을 명시하지 않았을 경우 질문드립니다.

0

87

1

강의 2:53 union을썼는데도 션이 중복

0

78

1

where 대신 having을 써도 되나요?

0

106

1

주문 내역에 대한 고객 데이터

0

88

2

in 수행

0

61

1

외부조인1 강의 관련 질문

0

87

3

커버링 인덱스와 랜덤i/o 질문

0

80

1

오타인거죠?

0

92

1

섹션 3 퀴즈 3번 문제

0

89

2

GROUP BY 기준 컬럼

0

97

1

질문이 있습니다

0

65

1

오타

0

90

2

실제 상용 서비스 질문

0

110

1

파티셔닝 관련 질문입니다.

0

70

1

join 문제 풀이2 문제1(self join) 질문

0

78

1

9. 인덱스2.pdf 중에서

0

90

1

문제 2번

0

82

2

문제와 풀이1 - 3번 문제

-1

84

2

잘 사용하진 않지만 풀 외부 조인을 사용하신 사례가 궁금합니다!

0

106

1

[58. 인덱스와 정렬]을 듣다가 질문입니다.

0

108

2

두개 이상의 테이블을 조인할때 인덱스 질문이 있습니다.

0

76

1