본문 바로가기

DB

Index를 활용한 성능 개선

1. 문제 정의

저번 게시글을 통해 bulk insert를 하니, 단순 조회 api도 오랜 시간이 걸리는 것을 경험할 수 있었습니다.
서비스가 활성화될 수록 데이터는 쌓일 것이기 때문에, 이를 해결해보도록 하겠습니다.

2. 쿼리 분석

조회 쿼리를 분석해보니, Full Table Scan을 하고 있는 것을 알 수 있습니다.

Full Table Scan이란 -----.
따라서 이러한 쿼리들이 많이 있다면 API 성능은 떨어질 수 밖에 없습니다.

3. 문제 해결

3 - 1. Index 추가

위의 문제를 해결하기 위해 Index를 추가해보도록 하겠습니다.

select
        umbrella0_.id as id1_9_,
        umbrella0_.created_at as created_2_9_,
        umbrella0_.deleted as deleted3_9_,
        umbrella0_.etc as etc4_9_,
        umbrella0_.missed as missed5_9_,
        umbrella0_.rentable as rentable6_9_,
        umbrella0_.store_meta_id as store_me8_9_,
        umbrella0_.uuid as uuid7_9_ 
    from
        umbrella umbrella0_ 
    where
        umbrella0_.deleted=0 
    order by
        umbrella0_.id asc limit 5 offset 0;

여기서 문제가 되는 부분은 where절로 추정됩니다.
delete에 index가 없기 때문에 full table scan이 일어나는 것을 추정되기에 index를 추가해보도록 하겠습니다.

ALTER TABLE umbrella ADD INDEX idx_deleted (deleted);

3 - 2. 성능 비교

Index를 추가하니, index를 타고 데이터가 조회된 것을 볼 수 있습니다.

Query Cost도 103736에서 62622로 40% cost가 감소된 것을 볼 수 있습니다.

이처럼 index를 활용한다면 쿼리의 성능을 개선할 수 있을 것입니다.

4. 마무리

이번 게시글을 통해 간단한 쿼리의 성능을 개선하는 방법을 알아보았습니다.
다음 게시글에서는 JPA에서 생성해주는 쿼리는 어떻게 성능을 개선할 수 있을지 제가 고민한 점과 해결한 방법을 공유하겠습니다.