@lob 관련하여 질문 드립니다.
안녕하세요!
JPA를 활용하여 여러가지 조회테스트를 해보고 있는데 @lob 컬럼이 존재하는 경우 select시 쿼리가 매우 느린현상을 발견했습니다. @lob 컬럼이 존재하는 경우에 쿼리를 빠르게 수행할 수 있는 방법이 있을까요?
답변 6
2
종호님 추천을 해드리고 싶은데... 제가 공부했던 시절의 책들이 다 절판되었네요...(오래되었네요 ㅎㅎ)
이 부분은 서점에 한번 가셔서 본인에게 맞는 가장 쉬운책을 찾는 것을 추천합니다^^
감사합니다.
2
안녕하세요. 종호님
@Lob 컬럼은 보통 데이터 사이즈가 크기 때문에 조회시 성능저하가 발생하게 됩니다.
특히 데이터 조회가 많은 리스트에서는 @Lob를 제외하고, 상세 화면에서만 @Lob를 조회하는 상황이 많은데요.
이런 경우 JPA를 사용할 때는 다음과 같은 해결방법이 있습니다.
1. @Lob 컬럼을 원본 테이블과 분리해서 별도의 테이블로 만들고 @Lazy로 사용한다.(그래서 꼭 필요할 때 조회한다.)
2. 원본 테이블을 조회할 때 DTO로 조회하고, 이때 @Lob컬럼은 제외한다. 이후에 @Lob는 꼭 필요할 때 따로 조회해서 사용한다.
3. @Basic을 활성화 하는 방법(설정이 복잡해서 비추천) 참고: https://vladmihalcea.com/the-best-way-to-lazy-load-entity-attributes-using-jpa-and-hibernate/
감사합니다.
1
네 종호님
@Lob가 DB에 따라 다르겠지만, 보통 내부에서 추가로 한번 더 별도의 조회가 일어납니다. 그래서 더 느립니다.
그리고 index는 이게 딱 정답이 없습니다. 그냥 조건이 7개면 7개 모두 인덱스를 거셔도 됩니다. 하지만 이렇게 되면 write 성능이 느려집니다. write시에 7개의 인덱스를 모두 갱신해야 하니까요. 최대한 순서에 맞는 composite를 잘 활용하고, 보통 자주 사용하는 것 위주로 걸어줍니다. 추가로 데이터베이스 성능 관련 책을 한번 보시면 어느정도 감이 오실거에요^^
감사합니다.
0
답변 정말 감사합니다! @Lob 컬럼에 데이터 사이즈가 크지 않더라도 성능 저하에 큰 영향을 끼치는 것 같습니다 ㅠㅠ
한가지 더 궁금한점이 있습니다. 다양한 Query 조건이 다양한 경우 예를 들어서 SearchQuery같이 where절에 들어가는 조건들이 아주 많을 경우에 어떤 col을 기준으로 index를 걸면 좋을지 궁금합니다.(조건이 7개라고 하면 그중에서 가장 중요한 col에 단일 index를 걸거나 자주 사용되는 조건이 3개면 해당하는 조건 3개를 대상으로 composite index를 거는지 등등)
강의 관련 외 질문입니다.
0
64
2
SpringBoot4 + Hibernate7 모듈 등록 방법 공유
0
85
1
BeanCreationException
0
86
3
Update 후 UpdateMemberResponse 매핑할 때
0
46
1
트랜잭션을 사용 안 할 때 커넥션은 언제 가져오나요?
0
97
2
페이징 + 검색조건 관련해서 질문드립니다.
0
70
1
Query Dsl Q파일 질문입니다.
0
81
1
루트 쿼리라는것은
0
58
1
메서드를 분리하는 기준
0
61
1
findAllWithMemberDelivery 메서드 질문드립니다.
0
108
3
연관관계 매핑을 안 쓸 경우, 사용해야 하는 전략
0
83
2
fetch join과 영속화와 OSIV의 관계
0
83
2
Distinct 사용 전 결과에 대한 의문
0
113
2
레포지토리 계층에서의 트랜잭션에 대한 의문
0
55
1
영속성 컨텍스트 생명주기의 신기한 부분이 있습니다.
0
77
2
dto 필드 속 엔티티 여부
0
58
1
뷰템플릿 사용 시
0
76
2
Result 클래스 관련 질문
0
56
1
@PostConstruct 프록시 관련 질문드립니다
0
85
1
DTO 대신 Form 사용은 안되나요?
0
133
1
OSIV ON 상태일 때
0
95
1
fetch join VS fetch join 페이징 궁금증
0
179
2
양방향 연관관계 알아보는 법?
0
104
1
16강 17강 간단 정리 이게 맞을까요 ?
0
165
2





