1. 왜 N+1이 되었는지 설명

1) db의 왕복 개념

→ 근데 이렇게 왕복이 많아지면 시간이 밀리겠지?

→ 그니까 최대한 시간을 줄여주는 게 포인트

2) N+1이 생겼던 이유

설문(survey)
 └─ 문항(question)        ← survey_id로 설문에 매달림
     └─ 선택지(choice)    ← question_id로 문항에 매달림

응답(response)
 └─ 답변(answer)          ← 어떤 응답이 어떤 문항에 뭘 골랐나

→ 설문지 들어감 (1번)

→ 설문지 안에 있는 답변들 다 한번식 들어감 (N번)

n_plus_1_vs_where_in_map_optimization.svg

3) 엑셀은 더 터짐

excel_export_table_shape_n_times_m.svg

🤫 여기서 궁금증 ! ”선택지는 필요없이 문항 → 답변만 하면 되는거 아닌가?” → 선택지가 필요한 이유는 답변이 인식되는게 숫자로 인식되어서 보기들이 순서대로(1,2,3,4,5…) 이런느낌으로 됨. 그러면 이 숫자가 무슨 보기를 말하는지 확인하기 위해서는 선택지가 필요한 거임.

4) 그래서 고치는 방법 - WHERE IN + Map

‼️ 어자피 필요한 거 다 알고 있자나? 그러면 다 달라고 하면 되징~~~

SELECT * FROM choice WHERE question_id IN (1,2,3,4,5,6,7,8,9,10)