교육 : 쿼리 검수 결과와 SQL 기초

호밀빵 굽는 쿼카·2022년 3월 4일
0

NHN Cloud 인턴

목록 보기
25/48

실행계획에서 꼭 확인해야 할 항목

  • 확인방법
  • 쿼리 실행시간
  • 컬럼
    • ALL : TABLE FULL SCAN
    • INDEX : INDEX FULL SCAN
  • 컬럼 : ROWS
    • 튜닝하면서 ROWS를 줄여나가야 함
  • 산출해내는 예상값이라서 정확하진 않습니다.
  • 컬럼 : Extra
    • Using temporary : 임시테이블 사용했다는 것. 성능 저하되는 경우많음
    • Using filesort : 정렬작업이 적용. 비용 많이 듬
    • Using join buffer : join 할때 join key 인덱스가 없을 때 보임
    • Using where : 조건 사용해서 출력되는 row 제한
    • Using index : 인덱스 사용해서 조건 적용
  • Key_len
    • 인덱스 활용한 컬럼
    • null 허용시 1byte 추가
    • varchar 길이 가변적이므로 char보다 2byte 더 사용



SQL QUERY REVIEW

여기서 잠깐!! 운이 좋게도 최근에 데이터베이스 for beginner 10장 인덱스에 대해 공부했습니다.
like '%검색어%' 에 대한 내용을 보니 공부하면서 질문 했던 내용이 생각났습니다.
%단어%, %단어는 인덱스의 첫번째가 무엇인지 알 수 없어 참조 할 수 없습니다.
question1 > 인덱스가 있어도 인덱스 레인지 스캔을 사용할 수 없다인덱스 참조를 할 수 없기 때문에 인덱스를 타지 않는다 라고 이해해도 될까요???
answer1 > 인덱스 레인지 스캔은 아래 그림과 같이 인덱스를 읽어야하는 범위가 정해져서 특정 구간의 인덱스만 스캔하는것을 index range scan 이라고 하고 인덱스를 처음부터 끝까지 읽는 것을 인덱스 풀 스캔 이라고 합니다. 인덱스가 있어도 인덱스 레인지 스캔을 사용할 수 없다 는 말그대로 인덱스 레인지 스캔 을 할 수 없다는 뜻입니다. 인덱스를 탄다 라는 뜻이 인덱스 레인지 스캔을 의미하면 인덱스를 타지 않는게 맞지만. 인덱스 스캔을 하지 않는다고는 말할 수 없습니다.
<레인지 스캔> : 루트 노드로부터 비교를 시작해 리프노드에 도달하여, 리프노드의 시작위치부터 순차적으로 읽는 방식. 그리고 범위에 마지막에 해당하는 데이터의 주소를 찾을 때까지 스캔하는 방식
question2 > 저는 like 를 사용하면 아예 인덱스를 사용할 수 없다고 생각했는데, 테이블 풀 스캔과 거의 동일한 인덱스 풀 스캔이 발생한다는 것은 인덱스를 사용해서 스캔을 하는 것인가요??
answer2 > 인덱스 풀 스캔은 인덱스 스캔이 맞고, 인덱스의 크기가 테이블 크기 보다는 작으니 인덱스 풀 스캔이 테이블 풀 스캔보다는 효율적이지만 풀 스캔은 어쨌든 데이터를 처음부터 끝까지 읽는 다는 뜻입니다. 인덱스 풀 스캔은 효율적인 인덱스 스캔 방법이 아닙니다. 그리고 어떤 값을 SELECT 하냐에 따라서 옵티마이저가 더 효율적이라고 판단되는 방법을 선택하여 인덱스 풀 스캔이 아닌 테이블 풀 스캔을 할 수도 있습니다.

레인지스캔,풀스캔은 인덱스 스캔 방식이고,
클러스터형인덱스,보조인덱스는 인덱스 종류



외래키는 자제하는 것 권유!!!



Group BY를 사용할때 주의할 점!



UNION관련,,,

profile
열심히 굽고 있어요🍞

0개의 댓글