SEノウハウ

N+1問題の解決

 

 

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の中で処理しているケースが実際のところがだいたいだと思う。

うまく処理を変えよう

 

Amazonおすすめ

iPad 9世代 2021年最新作

iPad 9世代出たから買い替え。安いぞ!🐱 初めてならiPad。Kindleを外で見るならiPad mini。ほとんどの人には通常のiPadをおすすめします><

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)