-
Notifications
You must be signed in to change notification settings - Fork 3
강의 조회 쿼리 최적화
klettermi edited this page Sep 12, 2023
·
1 revision
DB 자체 최적화는 필요가 없었지만 쿼리 테스트 결과 시간표 조회와 강의 조회 시 N+1 문제가 발생하였습니다. N+1 문제 해결과 쿼리의 성능을 향상시키기 위해 쿼리 최적화를 진행하였습니다. 이 중 실행 시간을 측정하여 성능 비교를 하였습니다.
각 조회 기능에서의 JPA로 구현 시, QueryDSL로 구현 시 각각 시간을 비교하는 10회의 반복 테스트를 시행하였습니다.
모든 시간 단위는 ms입니다.
- 시간표 조회
JPA | QueryDSL | |
---|---|---|
1회 | 24 | 110 |
2회 | 13 | 15 |
3회 | 16 | 14 |
4회 | 14 | 14 |
5회 | 13 | 23 |
6회 | 15 | 14 |
7회 | 14 | 15 |
8회 | 15 | 15 |
9회 | 20 | 12 |
10회 | 14 | 15 |
-
강의 조회
- 구분으로 조회
JPA QueryDSL 1회 255 173 2회 273 40 3회 511 41 4회 248 33 5회 260 42 6회 261 36 7회 264 34 8회 249 34 9회 253 32 10회 258 36 - 학과명으로 조회
JPA QueryDSL 1회 198 55 2회 193 9 3회 175 9 4회 167 8 5회 176 8 6회 183 9 7회 176 9 8회 167 9 9회 174 9 10회 186 8 - 과목 코드로 조회
JPA QueryDSL 1회 31 19 2회 31 17 3회 26 17 4회 27 17 5회 26 17 6회 29 15 7회 29 16 8회 40 16 9회 33 15 10회 42 17 - 대학으로 조회
JPA QueryDSL 1회 174 25 2회 167 18 3회 412 19 4회 178 20 5회 184 22 6회 188 19 7회 187 25 8회 162 17 9회 174 15 10회 167 17 - 전공명으로 조회
JPA QueryDSL 1회 134 27 2회 111 8 3회 130 8 4회 116 8 5회 119 8 6회 110 8 7회 126 9 8회 126 9 9회 120 8 10회 113 9 - 구분으로 조회
결과를 보면 시간표 조회는 시간이 줄어들지는 않았지만 N+1 문제를 해결하여 Select문의 개수를 줄여 성능을 최적화시켰습니다. 또한 강의 조회를 보면 N+1 문제를 해결하여 Select문의 개수를 줄인 것뿐만 아니라 시간도 최소 255ms에서 173ms(32.1%), **최대 130ms에서 8ms(93.8%)**로 줄어 성능을 최적화시켰습니다.