engineer_users = query('SELECT * FROM users WHERE job = "engineer"') foreach(users as user) { query('SELECT * FROM user_profiles WHERE user_id = ?', user.id) }
この場合ループの中でSELECTがengineer_usersの数だけ発行される
これが1回のクエリの結果N個取得して、N個の数だけSELECTが発行されるN+1問題
こうする
engineer_user_ids = query('SELECT * FROM users WHERE job = "engineer"') query('SELECT * FROM user_profiles WHERE user_id IN', engineer_user_idss)
こうすれば2行で済む
ただ実際foreachの中で処理しているケースが実際のところがだいたいだと思う。
うまく処理を変えよう