본문 바로가기
공부/Mysql

[RealMysql 8.0] 고급 최적화 9.3 ~ 9.4.12

by 띵커베르 2023. 2. 27.
728x90
  • 고급 최적화
    • 옵티마이저 옵션은 크게 조인 관련된 옵티마이저 옵션과, 옵티마이저 스위치로 구분할 수 있다.
  • 옵티마이저 스위치 옵션
    • MRR과 배치 키 엑세스(mrr & batched_key_access)
    • 블록 네스티드 루프 조인
    • 인덱스 컨디션 푸시다운
    • 인덱스 확장
    • 인덱스 머지
    • 인덱스 머지 - 교집합
    • 인덱스 머지 - 합집합
    • 인덱스 머지 - 정렬 후 합집합
    • 세미 조인
    • 테이블 풀-아웃
    • 퍼스트 매치
    • 루스 스캔
    • 구체화
    • 중복제거
    • 컨디션 팬아웃
    • 파생 테이블 머지
    • 인비저블 인덱스
    • 스킵 스캔
    • 해시 조인
    • 인덱스 정렬 선호
    • 조인 최적화 알고리즘
    • Exhaustive 검색 알고리즘
  • 쿼리 힌트
    • 인덱스 힌트와 옵티마이저 힌트로 나눌 수 있다.
  • 인덱스 힌트
    • straight_join, use index 등을 포함한 인덱스 힌트들은 모두 mysql 서버에 옵티마이저 힌트가 도입되기 전에 사용되던 기능들이다.
      • straight_join
        • 여러개의 테이블이 조인되는 경우 조인 순서를 고정하는 역할을 한다.
    • use index / force index / ignore index
      • use index
        • 옵티마이저에게 특정 테이블의 인덱스를 사용하도록 권장 하는 힌트이다.
      • force index
        • use index 보다 옵티마이저에게 미치는 영향이 더 강한 힌트이다. use index 랑 다른 점은 없다.
      • ignore index
        • use index 나 forece index와는 반대로 특정 인덱스를 사용하지 못하게 하는 용도로 사용한다.
    • sql_calc_found_rows
      • limit을 만족하는 수만큼 레코드를 찾았다고 하더라도 fount_rows() 함수를 사용하면 끝까지 검색을 수행해 limit을 제외한 조건을 만족하는 레코드가 전체 몇 건이었는지를 알아낼 수 있다.
      • 사용하지 않는것을 추천한다.
  • 옵티마이저 힌트
    • 옵티마이저 힌트는 영향 범위에 따라 다음 4개 그룹으로 나누어 볼 수 있다.
      • 인덱스: 특정 인덱스의 이름을 사용할 수 있는 옵티마이저 힌트
      • 테이블: 특정 테이블의 이름을 사용할 수 있는 옵티마이저 힌트
      • 쿼리 블록: 특정 쿼리 블록에 사용할 수 있는 옵티마이저 힌트로서, 특정 쿼리 블록의 이름을 명시하는 것이 아니라 힌트가 명시된 쿼리 블록에 대해서만 영향을 미치는 옵티마이저 힌트
      • 글로벌(쿼리 전체): 전체 쿼리에 대해서 영향을 미치는 힌트
728x90

댓글