MySQL 에서 데이터베이스 인덱스 가 실 효 될 수 있 는 상황 에 대한 상세 분석

머리말
MySQL 검색 어 에 있 는 관련 정 보 를 분석 하려 면 전체 표 조회 인지 부분 조회 인지 explain 을 사용 해 야 합 니 다.
색인 의 장점
4.567917.서버 가 스 캔 해 야 할 데 이 터 량 을 크게 감소 시 켰 다.4.567918.
  • 서버 가 정렬 을 피하거나 임시 표 정렬 을 줄 일 수 있 도록 도와 준다
  • 색인 은 랜 덤 I/O 를 순서 I/O 로 바 꿀 수 있다.
  • 색인 의 단점
  • 디스크 공간 을 차지 해 야 하기 때문에 불필요 하고 비효 율 적 인 색인 은 대량의 디스크 공간 을 차지 할 것 이다
  • DML 의 성능 을 떨 어 뜨리 고 데이터 의 임 의적 인 첨삭 과 수정 에 대응 하 는 색인 을 조정 해 야 한다.심지어 색인 분열 도 나타난다
  • 색인 은 해당 하 는 파편 을 생 성하 고 유지 비용 이 발생 합 니 다
  • 설명 하 다
    용법:explain+검색 어.

    id:검색 어의 시리 얼 번호 입 니 다.위의 그림 에는 selection 문구 만 있 기 때문에 하나의 시리 얼 번호 만 표 시 됩 니 다.새 겨 진 조회 가 있 으 면 다음 과 같 습 니 다.

    select_type:검색 유형 을 나타 내 는 몇 가지 가 있 습 니 다.
    simple:간단 한 select(유 니 온 이나 하위 조회 사용 하지 않 음)
    primary:가장 바깥쪽 select.
    유 니 온:2 층,select 이후 유 니 온 을 사 용 했 습 니 다.
    dependent union:union 문장의 두 번 째 select 는 외부 하위 조회 에 의존 합 니 다.
    subquery:하위 검색 의 첫 번 째 select
    dependent subquery:하위 쿼 리 의 첫 번 째 subquery 는 외부 하위 쿼 리 에 의존 합 니 다.
    derived:파생 표 select(from 자구 의 하위 조회)
    table:조회 표,결과 집합
    type:연결 유형 을 뜻 하 는'join type'이 라 고 합 니 다.쉽게 말 하면 my sql 검색엔진 이 SQL 조건 을 만족 시 키 는 데 이 터 를 찾 는 방식 이다.그 값 은:
    시스템 표,표 에는 한 줄 의 데이터 만 있 습 니 다4.567917.const:상수 읽 기,최대 한 개의 기록 만 일치 합 니 다.상수 이기 때문에 실제로 한 번 만 읽 어야 합 니 다
  • eq_ref:최대 한 개의 일치 하 는 결과 만 있 을 수 있 습 니 다.보통 홈 키 나 유일한 키 색인 을 통 해 접근 합 니 다
  • ref:앞의 표 에서 온 모든 줄 의 조합 에 대해 색인 값 과 일치 하 는 모든 줄 은 이 표 에서 읽 을 것 입 니 다
  • fulltext:전체 텍스트 색인 검색 을 진행 합 니 다
  • ref_or_null:ref 와 의 유일한 차이 점 은 색인 참조 조 회 를 사용 하 는 것 외 에 빈 값 을 추가 하 는 것 입 니 다
  • index_merge:검색 에서 두 개의(또는 더 많은)색인 을 동시에 사용 한 다음 색인 결 과 를 합 친 다음 표 데 이 터 를 읽 습 니 다
  • unique_subquery:하위 조회 의 결과 필드 조합 은 메 인 키 나 유일한 제약 조건 입 니 다
  • index_subquery:하위 검색 의 결과 필드 조합 은 색인(또는 색인 조합)이지 만 홈 키 나 유일한 색인 이 아 닙 니 다
  • rang:색인 범위 스 캔
  • index:전체 색인 검색..
  • all:전체 표 스 캔성능 이 위 에서 아래로 차례로 떨어지다.
    possible_keys:사용 가능 한 색인
    key:사용 한 인덱스
    ref:ref 열 은 키 와 함께 표 에서 줄 을 선택 할 열 이나 상 수 를 표시 합 니 다.
    rows:MySQL 이 조 회 를 실행 할 때 검사 해 야 할 줄 수 를 표시 합 니 다.여러 줄 간 의 데 이 터 를 곱 하면 처리 할 줄 수 를 추산 할 수 있다.
    Extra:추가 정보
  • Distinct:MySQL 에서 첫 번 째 일치 하 는 줄 을 발견 한 후 현재 줄 조합 에 대한 더 많은 줄 검색 을 중단 합 니 다
  • Not exists:MySQL 은 조 회 를 LEFT JOIN 최적화 할 수 있 습 니 다.LEFT JOIN 표준 에 맞 는 줄 을 발견 한 후 앞의 줄 을 조합 하지 않 고 이 표 에서 더 많은 줄 을 검사 합 니 다
  • range checked for each record(index map:\#):MySQL 에서 사용 할 수 있 는 색인 이 발견 되 지 않 았 으 나 앞 표 의 열 값 이 알려 지면 일부 색인 을 사용 할 수 있 습 니 다
  • Using filesort:MySQL 은 정렬 순서에 따라 줄 을 검색 하 는 방법 을 찾기 위해 추가 로 전달 해 야 합 니 다
  • Using index:색인 트 리 의 정보 만 사용 하고 실제 줄 을 검색 하지 않 아 도 됩 니 다
  • Using temporary:조 회 를 해결 하기 위해 MySQL 은 결 과 를 수용 할 임시 표를 만들어 야 합 니 다
  • Using where:WHERE 자 구 는 다음 표 와 일치 하거나 고객 에 게 보 내 는 줄 을 제한 하 는 데 사 용 됩 니 다
  • Using sort_union(...),Using union(...),Using intersect(...):이 함수 들 은 indexmerge 연결 형식 통합 색인 검색..
  • Using index for group-by:방문 표 의 Using index 방식 과 유사 합 니 다.Using index for group-by 는 MySQL 에서 색인 을 발 견 했 습 니 다.GROUP BY 나 DISTINCT 에서 조회 하 는 모든 열 을 조회 할 수 있 습 니 다.하 드 디스크 를 추가 로 검색 하지 않 고 실제 표 에 접근 할 수 있 습 니 다
  • 2.데이터베이스 에서 색인 을 사용 하지 않 는 경우
    아래 의 예 에서 GudiNo,StoreId 열 에는 모두 단독 색인 이 있다.
    2.1.like 조 회 는'%...'로 시작 하여'xxx%'로 끝 날 때 색인 을 계속 사용 합 니 다.
    다음 그림 에서 첫 번 째 문장 에 사 용 된%는 색인 을 사용 하지 않 았 습 니 다.rows 에서 224147 이 고 색인 rows 를 1 로 사용 합 니 다.
        
    2.2 where 구문 에서<>와!=을 사용 합 니 다.

    2.3 where 구문 에 or 를 사용 하지만 or 의 모든 필드 에 색인 을 추가 하지 않 았 습 니 다.

    이 경우 색인 을 사용 하려 면 or 의 모든 필드 에 색인 을 추가 해 야 합 니 다.
    2.4 where 구문 에서 필드 표현 식 작업

    2.5 where 구문 에서 Not In 사용

    다른 사람 이 쓴 글 을 보면"where 자구 에서 필드 에 대해 null 값 판단 을 하 는 것 을 피해 야 한다.그렇지 않 으 면 엔진 이 색인 사용 을 포기 하고 전체 표 스 캔 을 할 것"이 라 고 말 했다.실측 은 전체 표 스 캔 이 없다.

    "다 열 색인 에 대해 서 는 첫 번 째 부분 이 아니면 색인 을 사용 하지 않 습 니 다."실측 은 다 중 색인 을 사용 하 더 라 도 첫 번 째 부분 을 사용 하지 않 으 면 색인 을 명중 시 키 고 전체 표 스 캔 이 없습니다.

    총결산
    이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.

    좋은 웹페이지 즐겨찾기