(1 차)

300/60/70
(2 차)

1. 리펙토링
@Query("select distinct d from Designer d join fetch d.reservationTimes r " + "where d.hairshop.id = :hairshopId ") List<Designer> findDesignerFetchJoinByHairshopId(@Param("hairshopId") Long hairshopId);
@Override public List<ReservationTimeResponseDto> getReservationTimeList(Long hairShopId, LocalDate date) { List<Designer> designers = designerRepository.findDesignerFetchJoinByHairshopId(hairShopId); for (Designer designer : designers) { List<ReservationTime> filterReservationTimes = new ArrayList<>(); List<ReservationTime> reservationTimes = designer.getReservationTimes(); for (ReservationTime reservationTime : reservationTimes) { if (reservationTime.getDate().equals(date) && reservationTime.getReserved().equals(false)) { filterReservationTimes.add(reservationTime); } } designer.changeReservationTimes(filterReservationTimes); } return designers.stream() .map(designer -> reservationConverter1.toReservationTimeResponseDto(designer)) .collect(Collectors.toList()); }

수정 후

수정 전

2. 리펙토링 (쿼리 튜닝)
@Query("select distinct d from Designer d join fetch d.reservationTimes r " + "where d.hairshop.id = :hairshopId and r.date = :date and r.reserved = false") List<Designer> findDesignerFetchJoinByHairshopIdAndDate(@Param("hairshopId") Long hairshopId, @Param("date") LocalDate date);
date, reserved Column 인덱싱
@Entity @Table(name = "reservation_time", indexes = @Index(name = "i_reservationTime", columnList = "date")) @Getter @NoArgsConstructor public class ReservationTime {

![[New] 타일러팀](https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Fd0e59f54-3983-49c1-8f40-b92d6721d616%2Fkisspng-linux-fedora-unix-operating-systems-linux-5ab6faa3d2f047.949926281521941155864.png?table=block&id=8795517e-799e-41fd-9d58-bd2720695384&cache=v2)
