ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • MySQL Hint (옵티마이저 힌트 & 인데스 힌트)
    CS 지식/데이터베이스 2022. 7. 29. 15:47
    반응형

    Hint

    • 조인이나 인덱스 실행 계획을 개발자가 옵티마이저에 힌트를 주어 바꿀 수 있는 것이 힌트
    • 옵티마이저 힌트인덱스 힌트 두 종류로 나뉜다.

    옵티마이저 힌트

    • optimizer_switch 시스템 변수를 설정하여 제어 가능
      • 후속 쿼리에 대한 영향을 주기 때문에 mysql에 대한 이해도가 깊지 않다면 지양해야한다.
    • 명령문 내의 옵티마이저 힌트
      • optimizer_switch 보다 선행되며 다양한 범위 수준에서 적용된다.
        • 전역
          • 전체 문에 영향
        • 쿼리 블록
          • 명령문 내의 특정 쿼리 블록에만 영향
        • 테이블
          • 쿼리 블록 내의 특정 테이블에만 영향
        • 인덱스
          • 테이블 내의 특정 인덱스에만 영향
    • 주석 내에 지정해서 사용하며 SEMIJOIN, BKA 등이 있다. (상세한 것은 나중에 옵티마이저 힌트가 필요해지면 추가 정리)

    인덱스 힌트

    • query plan을 확인하다보면 원하지 않는 인덱스를 탄다거나, 인덱스를 타지 않는 경우, 인덱스 순서가 비효율적인 경우가 종종 발생한다.
    • 쿼리가 복잡한 경우 종종 발생하는데, 이럴 때 인덱스에 대한 힌트를 쿼리에 심어주어 원하는 인덱스를 탈 수 있도록 도울 수 있다.
    • FORCE INDEX
      • USE 키워드와 동일한 기능을 하지만, 옵티마이저에게 보다 강하게 해당 인덱스를 사용하도록 권장
        • 지정한 인덱스만 사용하도록 명령
      • SELECT *
          FROM TEST_TABLE FORCE INDEX(INK1_TEST_TABLE)
         WHERE id = 1
           AND name = "박진영";
    • USE INDEX
      • 특정 인덱스를 사용하도록 권장
        • 지정한 인덱스를 우선적으로 사용하되, 옵티마이저가 다른 인덱스를 사용하는 것이 낫다고 판단하면 다른 인덱스를 사용
      • SELECT *
          FROM TEST_TABLE USE INDEX(INK1_TEST_TABLE)
         WHERE id = 1
           AND name = "박진영";
    • IGNORE INDEX
      • 특정 인덱스를 사용하지 않도록 지정
      • SELECT *
          FROM TEST_TABLE IGNORE INDEX(INK2_TEST_TABLE)
         WHERE id = 1
           AND name = "박진영";
    • join과 oreder by, group by에도 인덱스 힌트를 줄 수 있다.
      • USE INDEX FOR JOIN
        • JOIN 키워드는 테이블 간 조인 뿐만아니라 레코드 검색하는 용도까지 포함
      • USE INDEX FOR ORDER BY
        • 명시된 인덱스를 ORDER BY 용도로만 사용하도록 제한
      • USE INDEX FOR GROUP BY
        • 명시된 인덱스를 GROUP BY 용도로만 사용하도록 제한

    Reference

    https://velog.io/@bae_mung/TIL-MySQL-Hint

    https://wakestand.tistory.com/562

    반응형

    'CS 지식 > 데이터베이스' 카테고리의 다른 글

    Surrogate key vs Natural Key (대체 키 vs 자연 키)  (0) 2022.07.29
    NoSQL  (0) 2021.01.14
    트랜잭션(Transaction)  (0) 2021.01.14
    정규화  (0) 2021.01.14
    인덱스(Index)  (0) 2021.01.14

    댓글

Designed by Tistory.