MYSQL8. optimizer_switch

j_6367·2021년 12월 12일
0

mysql8

목록 보기
2/8

참조


사용

현재값 확인

SELECT @@global.optimizer_switch
     , @@session.optimizer_switch

글로벌 적용

SET GLOBAL optimizer_switch='index_merge=on';

현재 세선 적용

SET SESSION optimizer_switch='index_merge=on';

쿼리단위 적용

SELECT /*+ SET_VAR(optimizer_switch='index_merge=on') */ *
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 사용여부로 사용함

  • block_nested_loop=on

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 해야함

  • batched_key_access=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

  • use_index_extensions=on

Engine Condition Pushdown Flags

  • engine_condition_pushdown=on

Index Condition Pushdown Flags

  • index_condition_pushdown=on

Limit Optimization Flags

index가 order by에 가중치를 많이 둘 경우 off 해야함

  • prefer_ordering_index=on

Skip Scan Flags

스킵할 컬럼의 분포도가 좋은 경우 off 해야함, 나쁜 경우에 유리함

  • skip_scan=on

Condition Filtering Flags

실행 계획 수립에 더 자원을 많이쓴다.

  • condition_fanout_filter=on

Derived Condition Pushdown Flags

  • derived_condition_pushdown=on

Derived Table Merging Flags

서브쿼리를 외부쿼리로 병합. 가능하면 수동으로 작성하도록

  • derived_merge=on

Subquery Transformation Flags

  • subquery_to_derived=off

0개의 댓글