https://www.youtube.com/watch?v=zMAX7g6rO_Y&t=3s

요약

SELECT

  1. Querydsl에서 exist 사용 금지
  2. Cross Join 회피하라
  3. Entity 보다 Dto를 우선하라
    1. 조회 컬럼 최소화
    2. Select 컬럼에 엔티티 자제
  4. Group By 최적화 (order by null)
  5. 커버링 인덱스

UPDATE / INSERT

  1. 일괄 Update 최적화 (벌크연산)
  2. Bulk Insert는 JPA로는 자제하라

Select 최적화

  1. Querydsl에서 exist 사용 금지

  2. Cross Join 회피하라

    .where(customer.customNo.gt(shop.shopNo))
    
  3. Entity 보다 Dto를 우선하라

    1. Select 컬럼에 엔티티 자제
      • 엔티티에 다른 엔티티가 연관되어있다면, 해당 엔티티의 모든 컬럼이 다 조회되어버림

      • oneToOne은 LazyLoading이 안된다 > N+1 문제

      • 또한 distinct 대상이 entity 컬럼 전체가 되어 최적화에 악영향을 끼친다

      • 엔티티 연관관계를 맺기 위해서 반대 엔티티도 필요하지 않은가?

        • 연관된 엔티티의 save를 위해서는 반대편 엔티티의 id만 필요하다

        Untitled

        Untitled

  4. Group By 최적화

  5. 커버링 인덱스

    select *
    from academy a
    join (select id
    		from academy
    		order by id
    		limit 10000, 10) as temp
    on temp.id = a.id
    

Update/Insert 최적화

  1. 일괄 Update 최적화 (벌크연산)
  2. Bulk Insert는 JPA로는 자제하라

Querydsl