Skip to content

강의 조회 쿼리 최적화

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%)**로 줄어 성능을 최적화시켰습니다.

Clone this wiki locally