N+1問題
問題点
1回のSQLで取得した複数のデータ(N行のモデル)に対して、それぞれN件分のSQLが発行される設計の問題点
「主データ(1) + 紐づくデータ数(N)」 の数だけクエリが発行され、性能劣化を引き起こす
ORMを使っているようなフレームワークで起こりやすい
Rails,Laravel,Djangoとか
あるモデルが参照している別のモデルを参照するようなケース
全てのユーザーに紐作くコメントみたいな
本質的にはforループでSQLが発行されてしまう構造
ORMではどんなSQLが発行されているかを意識しなくて済むので、それが仇になって気づけない
hiroki.iconまぁ気づきそうなもんだけどなぁ
対策
SQLのjoinで一発でデータを取るようにする
hiroki.iconわりと自分はSQL得意で、高レベルなORM使わないで書く方が好みだからこの問題は起こらなそう
slickとか使う機会あったら注意だな