LoginSignup
137
112

More than 5 years have passed since last update.

N+1問題は1+N問題

Posted at

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入れるといいらしい。

137
112
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
137
112