N+1問題
SQLに関する処理を行う時に発生する問題で、ORMを使うときに起こりやすい
例えば、usersテーブルとpostsテーブルがあり、usersテーブルからpostsテーブルに紐づいたdataのみを取得したい状況を考える
postsテーブルに紐づいたusersテーブルを習得する場合ORMを使うとconst user = post.userと書けるとする
それぞれのpostsに対してusersを取得したい場合下記のように書くことができる
code: n+1.ts
const users = posts.map(post => {
return post.user;
});
しかし上記のように書くとN+1問題が発生する
それは上記のコードだとSELECT * FROM posts WHERE posts.user_id = #users_table_id;となる(#users_table_idはそれぞれのusersテーブルのid)
つまりpost.userをloopで書くことでSQLをいちいち発行し、通信を行う為処理に無駄ができる
改善策として、一度に全てのpostsテーブルとusersテーブルのペアを取得するようにする必要がある
PostgreSQLの例: SELECT * FROM posts, users WHERE posts.user_id = users.id;