참조
사용
현재값 확인
SELECT @@global.optimizer_switch
, @@session.optimizer_switch
글로벌 적용
SET GLOBAL optimizer_switch='index_merge=on';
현재 세선 적용
SET SESSION optimizer_switch='index_merge=on';
쿼리단위 적용
SELECT *
FROM table_A
종류
Hash Join Flags
8.0.20부터 사용되지않고 block_nested_loop 사용해야함
hash_join=on
Block Nested-Loop Flags
BNL Join 사용여부
8.0.20부터 bnl이 제거되어 hash join 사용여부로 사용함
Index Merge Flags
1개 테이블에 2개 이상의 인덱스 사용
- index_merge=on
- index_merge_union=on
- index_merge_sort_union=on
- index_merge_intersection=on
Semijoin Flags
- semijoin=on
- loosescan=on
- firstmatch=on
- duplicateweedout=on
Subquery Materialization Flags
materialization(semi join 포함) 사용여부
materialization=on 일 경우
subquery_materialization_cost_based로 비용기반 선택
- materialization=on
- subquery_materialization_cost_based=on
Batched Key Access Flags
mrr=on
mrr_cost_based=off 해야함
Multi-Range Read Flags
- mrr=on
- mrr_cost_based=on
Multi range read 사용여부,
mrr=on인 경우 mrr_cost_based는 비용기반 사용여부
Index Visibility Flags
- use_invisible_indexes=off
Index Extensions Flags
Engine Condition Pushdown Flags
- engine_condition_pushdown=on
Index Condition Pushdown Flags
- index_condition_pushdown=on
Limit Optimization Flags
index가 order by에 가중치를 많이 둘 경우 off 해야함
Skip Scan Flags
스킵할 컬럼의 분포도가 좋은 경우 off 해야함, 나쁜 경우에 유리함
Condition Filtering Flags
실행 계획 수립에 더 자원을 많이쓴다.
- condition_fanout_filter=on
Derived Condition Pushdown Flags
- derived_condition_pushdown=on
Derived Table Merging Flags
서브쿼리를 외부쿼리로 병합. 가능하면 수동으로 작성하도록