MYSQL에서 "설명"을 사용하는 이유는 무엇입니까?

4525 단어 mysql

해석하다

  • EXPLAIN 문은 MySQL이 문을 어떻게 실행하는지에 대한 정보를 제공한다
  • SELECT, DELETE, INSERT, REPLACE 및 UPDATE 문을 사용합니다.
  • 는 해석 가능한 문장과 함께 사용되며, MySQL은 최적화기에서 나온 문장 실행 계획에 대한 정보를 표시합니다.
  • 어떻게 해석합니까


  • 이 섹션에서는 EXPLAIN에서 생성한 출력 열을 설명합니다.뒷부분은 유형과 추가 열에 대한 추가 정보를 제공합니다.

  • EXPLAIN Join Types


    EXPLAIN output의 type 열은 테이블의 연결 방식을 설명합니다.JSON 형식의 출력에서access type 속성의 값입니다.다음 목록에서는 조인 유형을 최적 유형에서 최하위 유형으로 순서대로 설명합니다.
    시스템
    테이블에는 행이 하나뿐입니다(= 시스템 테이블).이것은 const join 유형의 특례이다.
    콘스트
    이 테이블은 검색이 시작될 때 읽을 수 있는 최대 일치하는 줄이 있습니다.한 줄만 있기 때문에 최적화기의 나머지 부분은 이 줄의 값을 상수로 볼 수 있습니다.상수표는 한 번만 읽히기 때문에 매우 빠르다.
    메인 키나 유일한 인덱스의 모든 부분을 상수 값과 비교할 때const를 사용합니다.다음 질의에서 tbl name을 상수 테이블로 사용할 수 있습니다.
       `SELECT * FROM tbl_name WHERE primary_key=1;
    
       SELECT * FROM tbl_name
        WHERE primary_key_part1=1 AND primary_key_part2=2;`
    
    eq_ref
    이전 테이블의 줄 조합에 대해 이 테이블에서 줄을 읽습니다.시스템과const 형식을 제외하고는 가장 좋은 연결 형식입니다.색인을 사용하는 모든 부분을 연결하고, 색인이 메인 키나 유일한 비공식 색인일 때 사용할 수 있습니다.
    = 연산자를 사용하여 비교할 수 있는 색인 열에 eq ref를 사용할 수 있습니다.비교 값은 상수일 수도 있고 이 테이블 앞에서 읽은 테이블의 열을 사용하는 표현식일 수도 있습니다.다음 예제에서 MySQL은 eq ref 연결을 사용하여 ref 테이블을 처리할 수 있습니다.
    `참조 테이블, 기타 테이블 중에서 선택*
    여기는ref 표입니다.key column = 기타 테이블.열
        SELECT * FROM ref_table,other_table
          WHERE ref_table.key_column_part1=other_table.column
          AND ref_table.key_column_part2=1;`
    
    심판
    이전 테이블의 모든 줄을 조합하면, 이 테이블에서 일치하는 색인 값을 가진 모든 줄을 읽습니다.만약 연결이 키의 맨 왼쪽 접두사만 사용하거나 키가 메인 키나 유일한 인덱스가 아니라면 (다시 말하면 연결이 키 값에 근거하여 한 줄을 선택할 수 없다면) ref를 사용합니다.만약 사용한 키가 몇 줄만 일치한다면, 이것은 좋은 연결 형식입니다.
    ref는 = 또는 <=> 연산자를 사용하여 비교하는 색인 열에 사용할 수 있습니다.다음 예제에서 MySQL은 ref join을 사용하여 ref 테이블을 처리할 수 있습니다.
    `ref 표에서 *를 선택하고 키 열=expr;
         SELECT * FROM ref_table,other_table
           WHERE ref_table.key_column=other_table.column;
    
           SELECT * FROM ref_table,other_table
       WHERE ref_table.key_column_part1=other_table.column
          AND ref_table.key_column_part2=1;`
    
    전체 텍스트 인덱스
    연결은 전체 텍스트 인덱스로 실행됩니다.
    ref 또는 null
    이 연결 형식은 ref와 유사하지만, MySQL은 빈 값을 포함하는 줄을 추가로 검색합니다.이런 연결 유형의 최적화는 하위 조회를 해석하는 데 가장 많이 쓰인다.다음 예제에서 MySQL은 ref 또는 null 연결을 사용하여 ref 테이블을 처리할 수 있습니다.SELECT * FROM ref_table
    WHERE key_column=expr OR key_column IS NULL;
    인덱스 병합
    이 연결 형식은 색인 통합 최적화를 사용했음을 나타냅니다.이 경우 출력 줄의 키 열에는 사용되는 인덱스 목록이 있고 키 len에는 사용되는 인덱스의 가장 긴 키 부분 목록이 포함되어 있습니다.자세한 내용은 8.2.1.3 섹션 "색인 결합 최적화"를 참조하십시오.
    고유 하위 질의
    이 유형은 다음 형식의 하위 질의의 경우 eq ref를 대체합니다.value IN (SELECT primary_key FROM single_table WHERE
    some_expr)
    색인 서브쿼리
    이 조인 유형은 unique 하위 질의와 유사합니다.이 색인은 하위 질의의 색인을 대체하지만 다음 형식의 하위 질의에서 고유하지 않은 색인에 적용됩니다.value IN (SELECT key_column FROM single_table WHERE
    some_expr)
    범위
    주어진 범위 내의 줄만 검색하고 색인을 사용하여 줄을 선택합니다.출력 줄의 키열은 어떤 인덱스를 사용하는지 표시합니다.키는 사용한 가장 긴 키 부분을 포함합니다.이 유형의 ref 열은 NULL입니다.
    =, <>, >, >, <, <, <=, <, <=, 공백, <=>, 범위, 유사 또는 IN() 연산자를 사용하여 키 열을 상수와 비교할 때 범위를 사용할 수 있습니다.
       `SELECT * FROM tbl_name
          WHERE key_column = 10;
    
        SELECT * FROM tbl_name
          WHERE key_column BETWEEN 10 and 20;
    
        SELECT * FROM tbl_name
          WHERE key_column IN (10,20,30);
    
        SELECT * FROM tbl_name
          WHERE key_part1 = 10 AND key_part2 IN (10,20,30);`
    
    인덱스
    색인 연결 유형은 ALL과 동일하며 색인 트리만 검색됩니다.다음과 같은 두 가지 방법이 있습니다.
    만약 인덱스가 조회의 덮어쓰기 인덱스이고 테이블에 필요한 모든 데이터를 충족시키는 데 사용할 수 있다면 인덱스 트리만 스캔합니다.이 예에서, 추가 열은 색인을 사용하는 것을 나타낸다.인덱스만 검색하는 것은 보통 모든 검색보다 빠릅니다. 왜냐하면 인덱스의 크기는 표 데이터보다 작기 때문입니다.
    색인에서 읽은 내용을 사용하여 전체 테이블 스캔을 실행하여 색인 순서대로 데이터 줄을 찾습니다.색인 사용은 추가 열에 나타나지 않습니다.
    질의가 단일 색인의 일부인 열만 사용하는 경우 MySQL에서 이러한 연결 유형을 사용할 수 있습니다.
    * 모두
    *
    이전 테이블의 각 행 조합에 대해 전체 테이블 스캔을 수행합니다.만약 시계가const로 표시되지 않은 첫 번째 시계라면, 이것은 보통 좋지 않으며, 모든 다른 상황에서는 보통 매우 나쁘다.일반적으로, 색인을 추가하면 모든 문제를 피할 수 있습니다. 이 색인은 이전 테이블의 상수 값이나 열 값을 바탕으로 테이블에서 줄을 검색할 수 있습니다.

    좋은 웹페이지 즐겨찾기