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절에 많이 사용되는 컬럼은 인덱싱을 걸어주는게 성능면에서 확실히 도움이 된다.
'Dev > Spring Boot' 카테고리의 다른 글
[Spring Security] 수동 로그인 구현하기 (0) | 2024.10.29 |
---|---|
[Spring Security] 스프링시큐리티의 기본 로그인을 사용하지 못했던 문제 (0) | 2024.10.27 |
Java로 문자열 xml 파일 파싱 (0) | 2024.09.20 |
Spring Boot JPA - BufferedReader로 CSV 파일을 읽어 DB에 저장하기 (1) | 2024.09.20 |
Spring Boot - RestClient 로 공공데이터 얻어오기 (0) | 2024.08.20 |