데이터베이스/RDB

[MySQL] 인덱스를 활용한 Join 성능 개선

2022. 9. 22. 23:10
목차
  1. 현상
  2. 원인
  3. 해결

현상

여러 테이블을 Join 하여 Select을 했는데 꽤 오래 걸려서 쿼리를 분석하기위해 explain 을 쿼리앞에 붙혀서 실행했다.

결과로 rows 값이 비정상적으로 많은 테이블을 발견했다. extra를 확인해보니 Using join buffer(Block Nested Loop)라는 내용이 있었다

원인

Using join buffer(Block Nested Loop) 의 의미는 조인에 적절한 인덱스가 없어 조인 버퍼를 이용했음을 뜻하는데

결과적으로 테이블 조인 조건을 PK와 달리 인덱스가 없는 컬럼에 걸어서 오래 걸렸던 것이다.

해결

CREATE INDEX 인덱스이름
ON 테이블이름 (필드이름1, 필드이름2, ...)

해당 컬럼에 인덱스를 추가하여 다시 SELECT 해본 결과 성능이 개선됐다.

하지만 무작정 인덱스를 쓰는건 좋지않다. 아래는 단점 사항이다.

  • 인덱스 정보를 저장할 추가 저장 공간이 필요
  • INSERT, DELETE, UPDATE 시 성능 저하
  • 데이터가 많은 테이블이라면 처음 인덱스 만드는데 오래 걸릴 수 있다.

결국 인덱스를 상황에 맞게 사용한다면 보다 나은 성능을 기대할 수 있을 것이다.

<참고> https://rebro.kr/167
저작자표시 (새창열림)

'데이터베이스 > RDB' 카테고리의 다른 글

[SQL] Insert 시 중복 데이터 처리  (0) 2022.10.04
  1. 현상
  2. 원인
  3. 해결
'데이터베이스/RDB' 카테고리의 다른 글
  • [SQL] Insert 시 중복 데이터 처리
옥탑방고래
옥탑방고래
개발 관련 정보 정리중
옥탑방고래
고래의 코딩일지
옥탑방고래
전체
오늘
어제
  • 분류 전체보기 (67)
    • 프로그래밍 (15)
      • Java (1)
      • Spring (4)
      • AWS (0)
      • Git (1)
      • Docker (4)
      • k8s (1)
      • 오류보고 (4)
    • 데이터베이스 (2)
      • RDB (2)
      • NoSQL (0)
    • 알고리즘 (8)
      • 알고리즘 (3)
      • 코딩테스트 (1)
    • CS (35)
      • 자료구조 (6)
      • 네트워크 (27)
      • 개발지식 (2)
    • 개발 관련 소식 (0)
    • 포트폴리오 (0)
    • 일상 (4)
    • 오답 정리 (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Spring
  • 오답정리
  • 네트워크
  • 템플릿 캐싱
  • 커리어콘
  • IT 네트워크를 위한 네트워크 입문
  • 수식트리
  • 정렬
  • 라우터
  • 스위치
  • 리스트
  • docker
  • 오류
  • 브로드캐스트 스톰
  • 중위표기법
  • 트리
  • 알고리즘
  • 자료구조
  • Spring Devtools
  • DDoS 방어 장비
  • IT 엔지니어를 위한 네트워크 입문
  • 클래스풀
  • 리눅스마스터2급
  • MySQL
  • 클래스리스
  • java
  • 뇌를 자극하는 알고리즘
  • JUnit
  • vpn
  • IT엔지니어를 위한 네트워크 입문

최근 댓글

최근 글

hELLO · Designed By 정상우.
옥탑방고래
[MySQL] 인덱스를 활용한 Join 성능 개선
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.