pk, fk, uk 생성시 index는 자동으로 생성되는지 한번 확인해보자.
@Entity
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class Fruit {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long fruitId;
private String name;
private Integer price;
private String origin;
}
Entity를 만들고 위와 같이 서버를 실행하면 pk index가 생성되는것을 알 수 있다.
pk 생성시 자동적으로 클러스터형 인덱스가 생성된다.
alter table fruit
add unique key (name);
uk 역시 쿼리를 통해 uk를 컬럼에 지정하면 자동적으로 index가 생성되는 것을 알 수 있다.
uk 생성시 보조 인덱스가 자동으로 생성된다.
@Entity
public class Class {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long classId;
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "fruit_id")
private Fruit fruit;
}
임시로 Class라는 Entity를 만들고 외래키를 부여하면 자동적으로 위와 같이 fk index가 만들어지는 것을 볼 수 있다.
사실 fk는 두 테이블간의 관계이기에 index와는 관계가 없다.
그렇기에 DB마다 fk의 인덱스 자동생성이 지원되기도 하고 안되기도 한다.
위의 경우 MYSQL를 사용하기에 자동으로 보조형 인덱스가 생성된다.