본문 바로가기
IT/SQL

2022-07-07-index 사용하여 성능 개선

by 봉즙 2023. 2. 27.

layout : post
title : "index 사용하여 성능 개선하기"

category : MySQL

원인

mysql에서 pk 를 생성하는 경우에는 index가 자동으로 생성된다.
fk 생성시에도 index 생성되나 예제를 위해 fk는 생략하였다.

image

그러나 사용하다 보면 위와 같이 테이블 구조가 되어 있으며 company 를 이용하여 employer를 찾는 경우
full scan(type = ALL) 이 발생하게 된다.

-- 예제를 만드려고 생성한 쿼리
-- 아래 같은 경우에는 쿼리를 변경하는게 좋다.
-- explain
-- explain format = json
select e.id 
from employer e
join company c 
    on e.company_id = c.id
where c.id = 1

explain 이나 explain format = json 을 사용해도 되지만 work bench 의 기능을 사용하면 ui로 쉽게 확인 할 수 있다

image

번개 모양 + 돋보기 모양의 버튼을 누르면 실행된다

쿼리를 확인하여 full scan(type = ALL) 이 발생하는 경우

아래 처럼 인덱스를 설정해준 후 다시 측정하면

CREATE INDEX company_with_pk ON employer ( company_id, id );

image

접근 방식이 변경되는 것을 볼 수 있다.

쿼리를 실행 시 해당 쿼리의 최적 실행 경로를 찾기 위해 사용 가능한 모든 처리 방법의 예상 비용을 계산하게 된다.
사용 가능한 모든 처리 방법에 대하여 계산 하기 때문에 테이블의 인덱스가 많으면 많을수록 사용 가능한 방법이 많아며 되면서 실행 계획 수립 과정에서 cpu 사용률 증가를 불러 올 수 있어 적절 한 인덱스 갯수를 유지하는것이 중요하다.

'IT > SQL' 카테고리의 다른 글

2022-07-19-[Docker]Mysql Replication  (0) 2023.02.27
2022-07-18-MATCH AGAINST 사용하여 성능 개선  (0) 2023.02.27
2022-07-07-explain  (0) 2023.02.27
Mybatis #{} , ${} 차이  (0) 2020.07.07
Mybatis where 1=1 사용 이유와 다른 방법  (0) 2020.07.03

댓글