[SQL] SQL_NO_CACHE 와 EXPLAIN

flobeeee·2025년 4월 4일
0

Today I Learned

목록 보기
41/41
  • 상황

쿼리 테스트 관련 정보를 공유받다가
SQL_NO_CACHE 라는 sql 명령어를 보았다.
딱 보기에는 캐시없이 조회하는 거 같은데
느낌상 성능테스트 할 때 많이 쓰겠다는 느낌을 받아서 조사해봤다.

SQL_NO_CACHE

SQL_NO_CACHE는 MySQL의 쿼리 캐시 기능을 비활성화하는 힌트(hint) 명령어

  1. 캐시 사용 방지

    • 해당 쿼리의 결과를 MySQL 쿼리 캐시에 저장하지 않음
    • 매번 새로운 결과를 데이터베이스에서 직접 가져옴
  2. 사용 예시
    SELECT SQL_NO_CACHE * FROM users;

  3. 사용하는 경우

    • 실시간으로 변경되는 데이터를 조회할 때
    • 쿼리 성능 테스트를 할 때
    • 항상 최신 데이터가 필요한 경우
  4. 장단점

    • 장점: 항상 최신 데이터를 보장
    • 단점: 캐시를 사용하지 않아 쿼리 실행 속도가 상대적으로 느릴 수 있음
    • 주로 데이터 정확성이 중요하거나 성능 테스트를 할 때 사용됩니다.

EXPLAIN

EXPLAIN은 SQL 쿼리의 실행 계획을 분석하고 표시하는 명령어

  1. 예시
    EXPLAIN SELECT SQL_NO_CACHE * FROM users;

  2. 주요 출력 정보
    id: 실행 순서
    select_type: SELECT 문의 유형
    table: 참조되는 테이블
    type: 조인 타입 (system, const, eq_ref, ref, range, index, ALL 등)
    possible_keys: 사용 가능한 인덱스 목록
    key: 실제 사용된 인덱스
    key_len: 사용된 인덱스의 길이
    rows: 검사한 행의 수
    Extra: 추가 정보

  3. type 컬럼의 주요 값들 (성능 좋은 순)
    system > const > eq_ref > ref > range > index > ALL
    system: 테이블에 단 하나의 행만 있는 경우
    const: PRIMARY KEY나 UNIQUE 인덱스를 사용하는 경우
    ALL: 전체 테이블 스캔 (가장 비효율적)

  4. 활용 목적
    쿼리 성능 최적화
    인덱스 사용 여부 확인
    비효율적인 쿼리 패턴 발견
    실행 계획 분석을 통한 병목 지점 파악

  5. 주의사항
    실제 데이터를 반환하지 않고 실행 계획만 보여줌
    데이터베이스 버전에 따라 출력 정보가 다를 수 있음
    실제 실행 시간과는 차이가 있을 수 있음

profile
기록하는 백엔드 개발자

0개의 댓글

관련 채용 정보