• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

@Id @GeneratedValue 질문드립니다.

18.10.01 19:58 작성 조회수 193

0

책이나 강의에서 대부분 @GeneratedValue 를 사용하여

PK를 자동으로 생성하게 해주는 예제로 많이 진행이 된 것 같습니다.

그런데 제가 궁금한것은 저렇게 PK를 숫자로 자동할당 받는 방법으로 하면

인덱스를 활용할 수 없지 않나요?

편의성으로 보면 @GeneratedValue 가 좋지만

성능면에선 떨어질 것 같아서 문의드립니다.

답변 4

·

답변을 작성해보세요.

0

두번째 질문(where 절에 오는 컬럼 순서에 따라 인덱스를 탈 수 있느냐)은 첫번째 질문(PK가 숫자를 자동으로 할당받으면 인덱스를 사용하지 못하지 않느냐)과 조금 다른거 같습니다만.

name 컬럼에 인덱스를 설정하셨다면 인덱스가 작동해야 하는거 아닐까요. 음.. 참고로 JPA로 인덱스 맵핑은 @Table 애노테이션에서 indexes라는 프로퍼티를 사용해서 설정하실 수 있습니다.

https://stackoverflow.com/questions/3405229/specifying-an-index-non-unique-key-using-jpa

여기서 채택된 댓글말고 up 가장 많이 받은 댓글 참고하세요.

감사합니다.

0

wdvvgy님의 프로필

wdvvgy

질문자

2018.10.02

@GeneratedValue + @Id 가 PK로 활용되기때문에 인덱스로 등록된다는 것은 알고 있습니다.

다만 인덱스 활용시 where절에 오는 컬럼의 순서에따라 인덱스를 탈수있냐, 못타냐, 타다가마냐 정도로

달라지는것으로 알고있어서 질문드렸습니다.

회원 테이블에 No(시퀀스), Name, Phone, Address 등의 컬럼이 있고

인덱스가 No와 Name 으로 등록되어있을때

WHERE Name = 'asd%' 로 검색해도 인덱스가 작동하는건가요?

이 질문까지만 하고 인덱스에 대해 좀더 공부하고 오겠습니다. 감사합니다.

0

우선 좋은 질문 감사합니다.

@GeneratedValue는 사용하는 DB에 따라 키 생성 방식이 달라질 수 있습니다. 그리고 @Id와 함께 쓰이기 떄문에 PK 값이라서 유일한 값이고 null을 허용하지 않는 컬럼이 됩니다. 유일한 값만 들어있는 컬럼인데 왜 인덱스를 활용할 수 없다고 하시는지 잘 모르겠습니다.

@GeneratedValue가 숫자를 가져와서 할당하게 해주는게 아니라, 그 애노테이션으로 설정된 컬럼의 정의에 따라 그런 일이 발생하는 것입니다. 여기서 JPA가 해주는 일은 맵핑만 하는 것이지 값을 가져와서 설정하는 일을 해주는 것이 아닙니다.

감사합니다.