2021-07-31

0731 일대다 관계 조회 + 페이징 최적화하기

 순서!

1. 일대일관계까지는 일단 limit랑 offset지정해서, 페이징한다. (lazy와 with fetch join은 당연!)

2. 일대다관계의 쿼리 -> lazy초기화할때 땡겨올건데 - 이때 설정하는 옵션!!

hibernate.default_batch_fetch_size !!

이것을 이용하면 - in 쿼리 안에 날라가는 파라메터의 갯수를 조정할 수 있다.

일반적으로는 100~1000개로 잡는다고 한다.

이 옵션을 설정한 후 쿼리를 날리면 - 

1) 일단 일대일관계 쿼리 날리고 ->

2) 일대 다 관계 쿼리를 IN( ?,?,?...)로 날리고 ->

3) 일대 다 관계로 끌어온 값 안에 또 다른 연관관계 있으면 그것도 IN절로 각각 날려준다!!


3. 이렇게 함으로써 - 만약에 batch size설정이 없었다면

1대일쿼리 조회 결과 2개-> 2개 안에 orderitems 2개 -> 각각의 orderitem이 일대일관계로 item 정보 1개 =

2 * 2* 2 해서 날라가는 쿼리를

1 + 1+ 1로 단번에 줄일 수 있다!!

4. distinct fetch join 은 페이징이 안된다는 한계가 있는데 - 이것을 이러한 방식으로 극복할 수 있는 것이다!


5. distinct fetch join : 일대다관계의 쿼리 끌어올때 - 데이터 개수가 뻥튀기 된다.

이것을 JPA가 묶어주는 역할을 한다 ( 단, 쿼리결과는 그냥 평범한 SQL이고. 이건 어쩔수없다. JPA가 메모리상에서 distinct하게 처리한다)

댓글 없음:

댓글 쓰기

0328 fdisk, mkfs, mount, fstab

 1. 하드디스크를 붙인다. 2. fdisk -l로 하드디스크를 확인한다.  - interactiive한 커맨드모드 사용하여 (m) 붙인 하드디스크의 파티셔닝을 한다.  - 마지막에 w를 해야 실제로 반영이 된다.  3. mkfs를 하여 어떤 파일시스...