しめ鯖日記

swift, iPhoneアプリ開発, ruby on rails等のTipsや入門記事書いてます

ActiveRecordのexists?メソッドが発行しているSQLを調べてみる

ActiveRecordでデータが存在するかを調べる時はpresent?よりのexists?の方が良いと聞いたので違いを調べてみました。

調べたところ「LIMIT 1の有無」と「カラムの情報を取得するかどうか」が違っていました。

2.2.0 :005 > Item.where(name: 'name').exists?
  Item Exists (0.2ms)  SELECT  1 AS one FROM "items" WHERE "items"."name" = ? LIMIT 1  [["name", "name"]]

2.2.0 :007 > Item.where(name: 'name').present?
Item Load (0.2ms)  SELECT "items".* FROM "items" WHERE "items"."name" = ?  [["name", "name"]]