TIL(20201217)
by choising
20201217
QueryDSL 우아콘 이동욱님 세션
QueryDSL 의 exist 메소드 쓰지 않기
- queryDsl exists 메소드는 sql exsist 를 쓰지 않는다.
- sql exist 는 하나를 찾자마자 멈추기 때문에 효율적.
- 그래서 query dsl exsist 메소드나, fetchCount > 1 보다
- fetchFirst 가 더 효율적이다!
- 왜냐면 하나를 찾자마자 멈추는 효과때문에
이미 아는 값을 조회하지 말자. as 표현식으로 대체할 수 있다. asString, asNumber
Projcetions.fields(BookPageDto.class,
book.name,
Expressions.asNumber(bookNo).as("bookNo"),
book.id)
Select 절에 Entity 조회를 굳이 안해도 되는지 생각해보기
- projections 로 dto 를 가져올 때 id 만 조회해와서
- adItem.customer.id.as(“customerId”)
- toEntity() 메소드 시 .customer(new Customer(customerId))
- 이렇게 ID 만 같은 객체를 생성해도 저장할 때 문제가 없다. 는데 customer 가 다 null 로 저장되지는 않으려나?
group by 최적화
- file sort 제거를 위하여
- order by null 직접 구현하여 넣어주기
- (Order.ASC, NullExpression.DEFAULT, Default);
- 페이징일 경우 order by null 을 사용하지 못한다.
정렬
- 조회 결과가 100건 이하라면, 애플리케이션 정렬이 유리하다.
커버링 인덱스
- JPQL 은 from 절의 서브쿼리를 사용하지 못하므로
- DB 를 두번치는 방법을 사용한다.
- id 만 조회하는 쿼리
- 두번째 진짜 조회
- where 절에 in 구문에 위 ID 리스트
JPA Bulk inset 는 자제한다.
Subscribe via RSS