본문 바로가기

Dev/Spring Boot

[JPA] 인덱싱을 통한 SELECT 성능 향상

728x90

DB를 최적화함에 있어서 인덱싱은 가장 기본적인 방법이자 효과적이다. 인덱싱은 B+트리를 통해 SELECT 기능을 향상시키지만 그와 동시에 입력 및 수정 삭제의 기능은 떨어진다. 그러나 사용자가 건들일 필요가 없기 때문에 삽입 삭제가 잘 이뤄지지 않는 데이터라면 충분히 효과적이다.

 

@Table(name = "Course_Table", indexes = @Index(name = "idx_name", columnList = "name"))
public class course {
    @Id
    private String crsIdx;
    @Column(name = "NAME")
    private String name;
}

 

 

인덱싱을 거는 방법은 간단하다. JPA를 사용한다면 Table 어노테이션에 indexes를 추가하고 위처럼 원하는 컬럼을 선택하면된다. 지금은 name만 걸어놨지만 name + cnrIdx 도 가능하다. 정상적으로 진행되었다면 DB관리 도구의 indexes 안에 {테이블명.인덱스이름}으로 생성되어 있을 것이다.

 

 

SELECT * FROM course_table WHERE name = "템프9999";

 

성능 향상이 얼마나 되는지 확인하기 위해 위와 같은 테스트용 테이블을 준비했다. 테이블엔 2만4천개의 튜플이 존재하고 현재 name으로 인덱스를 걸어놓은 상태이고 위 쿼리를 날릴 것이다.

 

1. 인덱싱 걸기 전

 

2. 인덱싱 건 후



무려 0.35초에서 0.00038초로 엄청난 차이를 보이는 것을 확인할 수 있었다. 무조건적인 인덱싱은 금해야겠지만 WHERE절에 많이 사용되는 컬럼은 인덱싱을 걸어주는게 성능면에서 확실히 도움이 된다.