적재된 Querydsl-jpa
상속 / impl 사용하지 않기
-> 꼭 무언가를 상속 / 구현 받지 않더라도
-> 꼭 특정 Entity를 지정하지 않더라도 Querydsl을 사용할 수 있는 방법
JPAQueryFactory만 있으면 Querydsl은 사용할 수 있다. (~ 2:55)
동적쿼리를 사용할 때
불리언 쿼리를 사용하게 됨
-> 어떤 쿼리인지 알 수 없음
메소드로 만들어서 해당값이 null이 나오면 자동으로 없애준다. (명시적인 형식)
-> BooleanExpression null반환시 자동으로 조건절에서 제거 된다.
성능개선 select절
금지! -> exist -> 실제로 count으로 실행이 된다.
-> exists가 빠른 이유는 조건에 해당하는 row 1개만 찾으면 바로 쿼리를 종료하기 때문!
-> 직접 구현하자. -> limit 1로 조회 제한하기
cross Join 회피
나올 수 있는 모든 경우의 수를 고려해야되기 때문에,
묵시적 Join ->
Entity 보다는 Dto를 우선
불필요한 쿼리 발생 (모든 부가적 옵션 발생)
Entity 조회 -> 실시간으로 Entity 변경이 필요한 경우
Dto 조회 -> 고강도 성능 개선 or 대량의 데이터 조회가 필요한 경우
조회 컬럼 최소화하기
as 표현식으로 대체할 수 있음, as컬럼은 select에서 제외된다.
select 컬럼에 Entity 자제
-> 사용하지도 않는 컬럼들임에도 조회가 됨
-> N+1 무조건 발생
-> 반대편 Entity의 ID만 있으면 된다.
JPQL은 from절의 서브쿼리를 지원하지 않는다.
-> 커버링 인덱스 조회는 나눠서 진행
Cluster Key (PK)를 커버링 인덱스로 빠르게 조회하고,
조회된 Key로 Select 컬럼들을 후속 조회한다.
DrityChecking
업데이트 최적화 -> 16분
진짜 Entity가 필요한게 아니라면
<Querydsl과 Dto를 통해 딱 필요한 항목들만 조회하고 업데이트 한다>
Bulk Insert는 자제한다.
TypeSafe 한 방식으로 Bulk Insert를 처리할 순 없을까?
Querydsl != Querydsl-JPA 다른거다 -> 강의에서 이야기하는 것은 Querydsl-JPA
EntityQL프로젝트?
Gradle 5이상 필요
어노테이션 (name="")필수
int, double, boolean 등을 사용할 수 없다.
복잡함
@Embedded 미지원
<jpa와 db공부 같이하기>
'공부 > QueryDSL' 카테고리의 다른 글
QueryDSL 공부하기 - 4 ( DTO조회 ) (0) | 2022.05.13 |
---|---|
QueryDSL 공부하기 - 3 (0) | 2022.05.11 |
QueryDSL 공부하기 - 2 (0) | 2022.05.11 |