Develop record
[Spring JPA] Index 본문
- 데이터베이스의 테이블의 컬럼을 복사한 사본
- 데이터가 많을 경우 검색하는데 시간이 오래걸리는 단점을 보완하기 위해 만듦 -> 컬럼을 복사하여 정렬 해두면 빠르게 검색가능
- index 가 있을 경우 컴퓨터가 binary search 를 자동으로 해줌
- 단점
- db 용량 증가, 원본 테이블 추가/수정/삭제 시 index도 수정/삭제를 반영해야하기 때문에 소요 시간이 증가함
- 꼭 필요한 컬럼에만 index 만들 것
index 만들기
1. 하나만 만들 때
@Entity
@Table(indexes = @Index(columnList = "인덱스만들 컬럼명", name = "작명"))
public class Item {
}
2. 여러개 만들 때
@Entity
@Table(indexes = {
@Index(name = "인덱스이름작명", columnList = "인덱스만들컬럼명1"),
@Index(name = "인덱스이름작명", columnList = "인덱스만들컬럼명2")
})
public class Item {
}
3. multi column index (여러 컬럼을 한꺼번에 합친 index)
성능테스트
application.properties 설정파일에 아래 문장 추가 시 SQL 실행시 걸린 시간 확인 가능
spring.jpa.properties.hibernate.generate_statistics=true
DB에서 자료 검색 SQL 문법 작성 후 EXPLAIN 키워드 앞에 붙이면 index 사용여부 확인 가능
full text index
- 문자 검색을 위한 index
- find(All)By컬럼명Contains(변수) : index가 필요 없어 존재 여부 관계없이 느리게 동작
- JPA 문법 없음 -> DB에서 직접 만들기 / Repository에서 SQL문 만들어 실행
@Query(value = "실행할SQL문법~~", nativeQuery = true)
타입 함수명();
// 예시
// ?1 : 첫번째 파라미터로 받을 값
@Query(value = "select * from shop.item where id = ?1 ?2", nativeQuery = true)
Item rawQuery1(Long num, String text);