【rails】DBアクセス時のログにLoadと表示されるメソッドと、表示されないメソッドの違いとは


DBアクセス時に、モデル名 Loadと表示されるメソッドの例

User.all
=> User Load (4.6ms)  SELECT "users".* FROM "users"

User.first
User Load (5.2ms)  SELECT "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT 1

User.find(1)
User Load (1.4ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1

DBアクセス時に、モデル名 Loadとログに表示されないメソッドの例

User.count
(2.0ms)  SELECT COUNT(*) FROM "users"

User.pluck("email")
(1.7ms)  SELECT "users"."email" FROM "users"

上記の違いは単純で、モデルオブジェクトの構築の有無です。
モデル名 Loadのようにログにでるものは、モデルオブジェクトを作成した上で、メモリにロードしているんですね。

pluckなどもメモリにロードしてるんですが、モデルオブジェクトの構築を行っていないのでその分高速です。

pluck必要なフィールドだけを読み込むことで、メモリの使用量も削減できるとの事で
これが圧倒的に早い理由らしい