inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

업무에 바로 쓰는 SQL 튜닝

4-8. 응용 용어(1)

use index, force index 힌트 질문

232

Anfield

작성한 질문수 12

0

학습 환경은

docker + mariadb 입니다.!

 

현재 힌트를 사용해서 Manager 테이블의 인덱스를 강제시켜서 실행시켰는데 다음과 같이 table full scan으로 변환되었습니다.

 

이거는 mariadb 내부적으로 hint가 올바르지 않다고 생각해 실행 계획을 바꾼걸까요?

EXPLAIN SELECT e.FIRST_NAME, e.LAST_NAME

FROM EMP e,

MANAGER m FORCE INDEX (PRIMARY)

WHERE e.EMP_ID = m.EMP_ID ;

image.png


 

sql mysql dbms/rdbms mariadb query-tuning

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.

Anfield님께서 질문해주신 FORCE INDEX 사용과 관련하여 설명드리겠습니다.

MariaDB나 MySQL에서 FORCE INDEX 힌트를 사용하여 명시적으로 특정 인덱스를 사용하도록 지시할 수 있습니다. 하지만, 데이터베이스는 상황에 따라 최적의 실행 계획을 선택하게 되며, 이때 FORCE INDEX 힌트가 작성자의 예상과 다르게 작동할 수도 있습니다.

테이블을 풀 스캔(Full Table Scan)한 이유는 여러 가지가 있을 수 있습니다. MariaDB 엔진은 힌트를 분석하여 특정 인덱스가 해당 쿼리에 적절하지 않거나 인덱스보다 테이블 풀 스캔이 더 효율적일 것이라고 판단할 수 있습니다. 이를 결정하는 여러 요소가 있습니다:
1. 데이터 분포: 인덱싱된 컬럼의 데이터 분포가 고르지 못하다면 인덱스를 사용하지 않을 가능성이 있습니다.
2. 기본 통계: MariaDB의 옵티마이저는 기본 통계를 기반으로 하여 최선의 실행 계획을 선정합니다.
3. 버전 및 설정 차이: 사용 중인 MariaDB의 버전 또는 관련 설정에 따라 인덱스 힌트 처리 방식에 차이가 있을 수 있습니다.

추가적으로, 쿼리의 최적화가 필요하다면 인덱스가 유용하게 사용될 수 있도록 데이터베이스의 통계정보를 업데이트하거나 쿼리를 재구현하는 방법도 고려해볼 수 있습니다.

보다 자세한 내용을 알고 싶으시면, MariaDB 공식 문서를 참조하시면 더 많은 정보를 얻을 수 있을 것입니다.

도움이 되셨길 바랍니다!

패키지 구분에 대해 궁금한게 있습니다

0

10

1

노션 링크도 안 열리고, 알려준 vercel도 실행이 안됩니다.

0

11

1

Substack 1년 제공

1

22

3

특별 학습 자료 프로모션 1년 멤버십 무료 제공 문의드립니다

0

27

2

스프링부트 서버 에러나요

0

17

1

코드를 첨부해야하는 이유가 있나요?

0

20

2

간단한 오타 제보입니다.

0

19

1

큰 범위 조회 시 EXPLAIN의 rows 값이 정확하지 않은 이유가 궁금합니다.

0

35

2

실제 FK제약조건을 설정하지 않는이유

0

36

2

조회속도 개선에서 더 개선하는 방법이 궁금합니다.

0

28

2

Sequence 관련 질문

1

32

2

Image Only Query

1

29

2

Free Edition 실습 영상은 아직 업데이트전인가요?

0

22

1

라이브 운영중인 환경의 테이블에 인덱스 추가시 고려사항

0

36

2

상품 정보 크롤링

0

29

2

JPA Repository 질문이 있습니다!

1

33

2

페이지네이션 처리를 쿼리에서 하는 방식 질문

1

36

1

수강기간 연장

0

27

1

FTS 방식으로 수행하는 나쁜 SQL 에서 질문이 있습니다.

0

53

0

7-8 질문

0

55

1

다음과 같은 쿼리가 더 좋은 결과를 보이는데 이유가 뭔지 궁금합니다.

0

139

1

rollup mariadb 11 ver 기준

0

128

1

BNL Join 사용

0

129

1

select_type 에서 'simple' 경우 각각의 테이블이 '드라이빙' 또는 '드리븐' 인지 어떻게 알수 있나요?

0

106

0