left outer joinのコスト
Railsではjoins
メソッドを使ってSQLのJOIN
を表現できる。これは基本的にINNER JOIN
だが、こうするとLEFT OUTER JOIN
も書ける。
User.joins("LEFT JOIN bookmarks ON bookmarks.bookmarkable_type = 'Post' AND bookmarks.user_id = users.id") => SELECT "users".* FROM "users" LEFT JOIN bookmarks ON bookmarks.bookmarkable_type = 'Post' AND bookmarks.user_id = users.id
しかし、こう書くと次のような点でコストとなってしまう。
- 可読性が下がる
- (ここでは大丈夫だが、)生SQLを書くとDBに依存したコードになる
加えてOUTER JOIN
はINNER JOIN
と比較し、パフォーマンスもよろしくない。
なので、OUTER JOIN
を使いたくなったときは一旦立ち止まって、Rubyの世界でなんとか解決できないかを考えてみるのもよいかもしれない。
- 作者: ジョー・セルコ,Joe Celko,ミック
- 出版社/メーカー: 翔泳社
- 発売日: 2007/11/02
- メディア: 大型本
- 購入: 18人 クリック: 335回
- この商品を含むブログ (25件) を見る