Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
112
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

N+1問題は1+N問題

N+1というからほわっつ?ってなって、1+Nって言われると理解しやすいと思った。

このページ非常にわかりやすい。
http://www.techscore.com/blog/2012/12/25/railsライブラリ紹介-n1問題を検出する「bullet」/

上のページでいう、PrefectureとShopが一対多の関係になっているときに、Shopの方から、eachの中でshop.prefecture.name みたいにすると、shopの数だけprefecture探すSQL文が発行されることになる。

このページ(参考)では、N+1問題をシンプルに、「全レコードの取得に一つ+各レコード分だけ SQL を発行してしまう問題」と定義していて、要はただこれだけの問題だと感じた。

例えば100万レコードあったら100万回SQL発行されるのかって考えると、さすがにだれでもやばみ感じると思う。

実際にサーバー上で起きる処理の順番でいうと、1回で全件取得した後に、N回SQL発行されるということなので、1+Nなんだなあと思いながら、N+1問題って言葉使えばいいと思った。

対処方法はいくつかあるので、気が向いたら追記する。
N+1問題検知したいだけなら、bulletってgem入れるといいらしい。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
112
Help us understand the problem. What are the problem?