破いて捨てたノート

Webやテクノロジーやそれ以外に関する思いつき

left outer joinのコスト

Railsではjoinsメソッドを使ってSQLJOINを表現できる。これは基本的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 JOININNER JOINと比較し、パフォーマンスもよろしくない。 なので、OUTER JOINを使いたくなったときは一旦立ち止まって、Rubyの世界でなんとか解決できないかを考えてみるのもよいかもしれない。

SQLパズル 第2版 プログラミングが変わる書き方/考え方

SQLパズル 第2版 プログラミングが変わる書き方/考え方