Search
4️⃣

CommentRepository

결론

기존에 걸려있는 인덱스 외(FK)에 다른 인덱스를 걸지 않기로 결정
ORDER BY는 인덱스 대신 filesort를 통해 정렬하는 것으로 결정
comment테이블은 insert query 사용량도 고려해야 하기 때문에

1. findAllByOfferingOrderByCreatedAt

Hibernate: select ce1_0.id, ce1_0.content, ce1_0.created_at, ce1_0.member_id, ce1_0.offering_id, ce1_0.updated_at from comment ce1_0 where ce1_0.offering_id=? order by ce1_0.created_at
SQL
복사

인덱스가 없을 때(기본 fk 인덱스만 설정)

created_at 칼럼에 인덱스를 적용해야 할까?

Extra를 보면 filesort를 통해 정렬을 진행한다.
comment 테이블의 최대 레코드 크기 : 280 byte
sort_buffer_size = 256kb = 262144 byte
sort_buffer_size 내부에서 최대로 정렬할 수 있는 레코드의 수 = 약 936건
→ 각 Offering 당 comment는 1천 건 미만으로 다수 생성될 것으로 예상됨, 인덱스를 설정하는 것보다 현행대로 filesort를 사용하는 것이 좋다고 판단
+) 현재 findAll 쿼리를 사용 중인데, 추후 쿼리를 좀 더 최적화하여 개선한다면 인덱스를 설정하지 않아도 될 것이라 예상됨

2. findTopByOfferingOrderByCreatedAtDesc

Hibernate: select ce1_0.id, ce1_0.content, ce1_0.created_at, ce1_0.member_id, ce1_0.offering_id, ce1_0.updated_at from comment ce1_0 where ce1_0.offering_id=? order by ce1_0.created_at desc fetch first ? rows only
SQL
복사

인덱스가 없을 때(기본 fk 인덱스만 설정)

findAllByOfferingOrderByCreatedAt쿼리와 같다. 추가된 부분은 hibernate에 의해 fetch 절이 추가된 점, 정렬이 desc로 설정된 점이라 findAllByOfferingOrderByCreatedAt 와 마찬가지로 인덱스를 추가하지 않아도 될 것이라 판단한다.