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