1. [펀잇] 레시피 좋아요 api의 불필요한 쿼리를 제거하도록 개선했다.
https://github.com/woowacourse-teams/2023-fun-eat/pull/680
2. [펀잇] 상품목록조회 api을 커서기반페이징으로 개선했다.
1) offset
select
p.id,
p.name,
p.price,
p.image,
p.average_rating,
p.review_count
from
product p
where
p.category_id=2
order by
p.price asc,
p.id desc
limit 10 offset 20;
2) offset 제거 - where 절
select
p.id,
p.name,
p.price,
p.image,
p.average_rating,
p.review_count
from
product p
where
p.category_id=2
and(
(p.price = (select p2.price
from product p2
where p2.id = :lastReviewId)
and p.id < :lastReviewId
)
or
(p.price > (select p2.price
from product p2
where p2.id = :lastReviewId)
))
order by p.price, p.id desc
limit 10;
3) offset 제거 - CTE
WITH LastProductPrice AS (
SELECT price
FROM product
WHERE id = :lastReviewId
)
SELECT
p.id,
p.name,
p.price,
p.image,
p.average_rating,
p.review_count
FROM product p
JOIN LastProductPrice lpp
ON (p.price = lpp.price AND p.id < :lastReviewId) OR p.price > lpp.price
WHERE p.category_id = 2
ORDER BY p.price, p.id DESC
LIMIT 10;
4) offset제거 - join
SELECT
p.id,
p.name,
p.price,
p.image,
p.average_rating,
p.review_count
FROM product p
JOIN product p2
ON p2.id = :lastReviewId
WHERE
p.category_id = 2 AND
(
(p.price = p2.price AND p.id < :lastReviewId) OR
p.price > p2.price
)
ORDER BY p.price, p.id DESC
LIMIT 10;
https://github.com/woowacourse-teams/2023-fun-eat/pull/685
- 커서 기반 페이징
ㅋㅋ 저 쿼리 짜느라 아주 머리가 터질뻔했다..
팀원들이랑 얘기해봐도 마땅한 답을 모르겠어서 구구 코치님이랑도 대화를 나눴다..
결국 저 4)방법으로 결정했다. 근데 나중에 커스텀 커서?라는걸로 바꿀 수도 있을 것 같다.
- 동적 쿼리
QueryDsl을 쓰기 위해서는 코치님들의 허락을 받아야 한다!
그래서 QueryDsl없이 동적쿼리 만들겠다고 Criteria랑 Specification 만지작 거리다가.. 진짜 정신나갈 것 같아서 ㅜㅋㅋ
일단 메소드분리로 처리해놨다..
조만간 허락받고 다음주?쯤에 QueryDsl로 바꿀 예정!
3. [펀잇] 내가 만든 api들의 쿼리를 정리했다.