Spring Data JPA에서 Index를 적용하기
@Table 어노테이션을 사용하여 테이블의 이름과 인덱스를 정의할 수 있다.
@Entity
@Table(name = "PRODUCT", indexes = {
@Index(name = "idx__name", columnList = "name")
})
public class Product {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false)
private String name;
@Column(nullable = false)
private String category;
@Column(nullable = false)
private double price;
@Column(nullable = false)
private LocalDate releaseDate;
// Getters, Setters, Constructors, etc.
}
위의 예시는 @Table 어노테이션의 indexes 속성을 사용하여 1개의 단일 컬럼 인덱스를 정의
Index를 사용해야 하는 경우?
https://ryureeru.tistory.com/82
[DB] 인덱스(Index)란?
인덱스(Index)란? 데이터베이스에서 특정 컬럼(또는 여러 컬럼의 조합)의 값을 빠르게 찾아내기 위한 자료구조 데이터베이스 성능을 향상시키는 데 도움을 주는 개념 주로 데이터베이스의 검색
ryureeru.tistory.com
Index는 데이터베이스에서 특정 컬럼의 검색 성능을 향상시키는 데 도움이 되는 기능이다. 인덱스가 없는 상태에서 특정 컬럼을 기준으로 검색하면, 데이터베이스는 모든 레코드를 순차적으로 검사해야 한다. 하지만 인덱스가 있다면 검색 대상 컬럼의 값을 빠르게 찾아낼 수 있다.
따라서 Index를 사용해야 하는 경우는 다음과 같다:
1. 데이터베이스 검색 성능을 향상시키고자 할 때:
특정 컬럼을 자주 검색하거나 WHERE 절에서 사용되는 컬럼에 인덱스를 적용하여 검색 성능을 향상시킬 수 있다.
2. JOIN 작업을 수행할 때:
JOIN 작업을 수행하는데에는 인덱스가 매우 중요. JOIN의 기준이 되는 컬럼들에 인덱스를 적용하여 JOIN 작업을 최적화할 수 있다.
3. 정렬을 자주 사용해야 할 때:
ORDER BY 절에서 자주 사용되는 컬럼에 인덱스를 적용하여 정렬 성능을 향상시킬 수 있다.
4. 고유성(unique) 제약 조건을 위해:
UNIQUE 제약 조건을 가지는 컬럼에는 인덱스를 적용해야 한다. 이를 통해 중복된 값을 방지하고 빠른 검색을 가능하게 한다.
하지만 인덱스도 모든 상황에 항상 도움이 되는 것은 아니다. 인덱스는 데이터베이스의 쓰기 성능에 영향을 미칠 수 있으며, 인덱스를 유지하는데 필요한 추가적인 저장 공간이 발생한다. 따라서 인덱스를 사용해야 할 때는 주로 다음과 같은 상황을 고려해야 한다:
1. 데이터베이스 테이블의 크기가 상당히 큰 경우
2. 자주 검색되는 컬럼 또는 JOIN 작업이 필요한 경우
3. 정렬이나 고유성(unique) 검사가 필요한 경우
중요한 점은 데이터베이스와 쿼리의 특성에 따라서 적절한 인덱스를 적용해야 한다는 것. 적절한 인덱스를 사용하면 쿼리의 성능이 향상되고 데이터베이스의 효율성이 증가한다.
다만, 인덱스를 사용할 때에는 신중해야 하며, 필요한 인덱스만 생성하는 것이 좋다. 불필요한 인덱스는 데이터베이스의 쓰기 성능을 저하시킬 수 있으며, 유지 비용 또한 증가할 수 있다. 따라서 인덱스를 적용하기 전에는 데이터베이스의 크기와 특성, 어떤 쿼리가 자주 실행되는지 등을 고려하여 결정하는 것이 중요하다.
'Spring' 카테고리의 다른 글
[Spring] DI/생성자 주입과 필드 주입의 차이점 (0) | 2023.07.15 |
---|---|
[Spring] 면접 예상 질문(1) (0) | 2023.07.15 |
[Spring] ApplicationContext (0) | 2023.07.15 |
[Spring] 의존성 주입(DI)의 예시 (0) | 2023.07.15 |
[Spring] JPA ddl-auto 옵션 (0) | 2023.01.05 |