use index, force index 힌트 질문
325
投稿した質問数 12
학습 환경은
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 ;
回答 1
0
안녕하세요, 인프런 AI 인턴입니다.
Anfield님께서 질문해주신 FORCE INDEX 사용과 관련하여 설명드리겠습니다.
MariaDB나 MySQL에서 FORCE INDEX 힌트를 사용하여 명시적으로 특정 인덱스를 사용하도록 지시할 수 있습니다. 하지만, 데이터베이스는 상황에 따라 최적의 실행 계획을 선택하게 되며, 이때 FORCE INDEX 힌트가 작성자의 예상과 다르게 작동할 수도 있습니다.
테이블을 풀 스캔(Full Table Scan)한 이유는 여러 가지가 있을 수 있습니다. MariaDB 엔진은 힌트를 분석하여 특정 인덱스가 해당 쿼리에 적절하지 않거나 인덱스보다 테이블 풀 스캔이 더 효율적일 것이라고 판단할 수 있습니다. 이를 결정하는 여러 요소가 있습니다:
1. 데이터 분포: 인덱싱된 컬럼의 데이터 분포가 고르지 못하다면 인덱스를 사용하지 않을 가능성이 있습니다.
2. 기본 통계: MariaDB의 옵티마이저는 기본 통계를 기반으로 하여 최선의 실행 계획을 선정합니다.
3. 버전 및 설정 차이: 사용 중인 MariaDB의 버전 또는 관련 설정에 따라 인덱스 힌트 처리 방식에 차이가 있을 수 있습니다.
추가적으로, 쿼리의 최적화가 필요하다면 인덱스가 유용하게 사용될 수 있도록 데이터베이스의 통계정보를 업데이트하거나 쿼리를 재구현하는 방법도 고려해볼 수 있습니다.
보다 자세한 내용을 알고 싶으시면, MariaDB 공식 문서를 참조하시면 더 많은 정보를 얻을 수 있을 것입니다.
도움이 되셨길 바랍니다!
트랜잭션 내 Redis I/O 에 대한 궁금한점
1
15
1
3-13 리텐션 과제 제출합니다!
0
47
1
getOrCreate / Unique? 멱등 처리 질문
1
57
2
경쟁상태
0
47
1
stmt
0
39
1
실행 통계2 explain analyze 조인 쿼리
0
37
1
3강 인덱스 구조 강의 자료 문의
1
48
1
조회 메서드에서 @Transactional(readOnly=true) 질문
1
39
1
[해결됨]마지막 강의 내용 수정 화면이 기능을 못하네요.
0
47
1
[해결됨]부분적으로 화면 이동이 안되는 부분이 있습니다.
0
84
6
68강 문제 풀이
0
42
1
현대 쿼리 복잡성에 관한 질문
0
84
3
key_length 가 사용되는곳
0
43
1
[과제]1-9 피벗 테이블 만들어보기
0
63
2
cnt수를 구할 때 왜 user_pseudo_id 를 사용하나요?
0
60
2
낙관적락 질문있습니다.
0
44
1
해당 결제 부분을 포폴에서 테스트 api를 적용에 대한 궁금증
1
44
1
수강기간 연장
0
70
1
FTS 방식으로 수행하는 나쁜 SQL 에서 질문이 있습니다.
0
80
0
7-8 질문
0
86
1
다음과 같은 쿼리가 더 좋은 결과를 보이는데 이유가 뭔지 궁금합니다.
0
171
1
rollup mariadb 11 ver 기준
0
163
1
BNL Join 사용
0
168
1
select_type 에서 'simple' 경우 각각의 테이블이 '드라이빙' 또는 '드리븐' 인지 어떻게 알수 있나요?
0
129
0

