Replies: 3 comments
-
템플릿 단건 조회
방법1: Batch Fetching
방법2 : 커버링 인덱스현재 response에 사용되지 않는 modifiedAt, createdAt 등의 데이터도 조회하기 위해 인덱스만으로 데이터를 찾지 못하고 있다. 방법3: TemplateTag 조회 로직 변경 👍Template의 Tag 목록 조회 / Tag 정보 조회 (ID별) 을 하나의 query로 변경 @Query("""
SELECT t
FROM Tag t
JOIN TemplateTag tt ON t.id = tt.id.templateId
WHERE tt.template = :template
""")
List<Tag> findAllByTemplate(Template template); Template의 Tag 목록 조회
select
t1_0.id,
t1_0.created_at,
t1_0.modified_at,
t1_0.name
from
tag t1_0
join
template_tag tt1_0
on t1_0.id=tt1_0.template_id
where
tt1_0.template_id=?
|
Beta Was this translation helpful? Give feedback.
-
템플릿 삭제
방법 1: @Modifying을 이용한 삭제 쿼리 개선템플릿들의 요소를 삭제하는 방법이 현재 deleteByTemplateId 여러번 실행하고 있다. 해당 부분을 한번의 쿼리로 모두 삭제하는 명령어로 변경한다. @Modifying(clearAutomatically = true)@Modifying을 사용해 해당 메서드가 데이터베이스의 데이터를 변경하는 쿼리임을 Spring Data JPA에 알릴 수 있다.
썸네일 삭제@Modifying(clearAutomatically = true)
@Query("DELETE FROM Thumbnail t WHERE t.template.id in :templateIds")
void deleteByTemplateIds(List<Long> templateIds); 썸네일 삭제 (Template ID 기반)
delete t1_0
from
thumbnail t1_0
where
t1_0.template_id in (?) 소스코드 삭제@Modifying(clearAutomatically = true)
@Query("DELETE FROM SourceCode s WHERE s.template.id in :templateIds")
void deleteByTemplateIds(List<Long> templateIds); 소스코드 삭제 (Template ID 기반)
delete sc1_0
from
source_code sc1_0
where
sc1_0.template_id in (?) 템플릿태그 삭제@Modifying(clearAutomatically = true)
@Query("DELETE FROM TemplateTag t WHERE t.template.id in :templateIds")
void deleteAllByTemplateIds(List<Long> templateIds); 템플릿태그 삭제 (Template ID 기반)
delete tt1_0
from
template_tag tt1_0
where
tt1_0.template_id in (?) 방법 2: 템플릿 삭제 시 삭제 권한을 확인해야할까?현재는 템플릿 삭제 전에 템플릿 id로 템플릿 조회 후 템플릿 권한을 확인한 후 삭제한다. 해당 로직을 바로 템플릿 삭제 시, 다음 로직으로 변경하면 어떨까?
확인하지 않아도 된다면AS-ISTemplate template = templateRepository.fetchById(id);
template.validateAuthorization(member);
templateRepository.deleteById(id); TO-BEtemplateRepository.deleteByIdAndMember(id, member); |
Beta Was this translation helpful? Give feedback.
-
회원 정보 조회인덱스 개선 사항Member 테이블
쿼리 최적화커버링 인덱스
멤버 ID로 해당 멤버 객체를 조회한다. 하지만 실상 해당 로직 이후 멤버 이름 외에는 사용되는 정보가 없다. 그래서 멤버를 조회하는 로직을 멤버 이름을 조회하는 로직으로 수정한다. 이를 통해 커버링 인덱스 이용하도록 변경해 쿼리 성능을 개선한다. BeforeAfterBUT 개선 못함. 인터셉터에서 멤버 조회하기 때문~ |
Beta Was this translation helpful? Give feedback.
-
쿼리 최적화 하면서 고민했던 방식들에 대해 기록한다.
Beta Was this translation helpful? Give feedback.
All reactions