Table Index 생성 ( Single, Multi, Unique Index ) 예제
@Index 어노테이션을 사용하여 Index를 생성한다.
해당 어노테이션은 javax.persistence 패키지임을 유의한다.
Book.java
@Entity
@Table(indexes = @Index(columnList = "publishedDateOn"))
public class Book {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
private Date publishedDateOn;
}
- Book entity에 @Index 어노테이션을 사용하여 Index를 생성할 컬럼을 지정한다.
생성결과
다음과 같이 지정한 컬럼에 Index가 생성된다. Key 이름은 무작위로 생성되는데 이를 @Index 속성 중 name 을 사용하여 이름을 지정할 수 있다.
생성결과
복합 인덱스 생성(Multi column index)
@Table(indexes = @Index(name="idx_book_name_published_date", columnList = "name, publishedDateOn"))
- columnList에 comma 를 사용하여 컬럼을 나열한다.
생성결과
고유 인덱스 생성(Unique column index)
Book.java
- name, author 멀티컬럼을 갖는 유니크 인덱스를 생성한다.
@Table(indexes = @Index(name="unique_idx_book_name_author", columnList = "name, author", unique = true))
public class Book {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
private Long author;
private Date publishedDateOn;
}
생성 결과
위에서 생성한 인덱스는 Spring console log 에서 확인 할 수 있다.
Console log
Hibernate: alter table book add constraint unique_idx_book_name_author unique (name, author)
N개 Index 생성
@Entity
@Table(indexes = {
@Index(name="idx_book_name", columnList = "name"),
@Index(name="idx_book_name_published_date", columnList = "name, publishedDateOn"),
@Index(name="unique_idx_book_name_author", columnList = "name, author", unique = true)
})
public class Book {
Console log
Hibernate: create index idx_book_name on book (name)
Hibernate: create index idx_book_name_published_date on book (name, published_date_on)
Hibernate: alter table book add constraint unique_idx_book_name_author unique (name, author)
반응형