Rails
n+1

N+1問題は1+N問題

More than 3 years have passed since last update.

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