

例えばallを実行すると、`User Load`という文字が表示されます。

[code]

    User.all
     User Load (3.5ms)  SELECT "users".* FROM "users"
    
[/code]

一方で、`pluck`を実行するとSQL自体は一緒のようですが`User Load`は表示されません。

[code]

    User.pluck(:name)
    (1.9ms)  SELECT "users"."name" FROM "users"
    
[/code]

はじめはメモリにロードしているかの違いかなと思ったんですが、  
`pluck`もメモリにロードしてることは一緒だと思うので、何が違うのかなと疑問に思いました。

[code]

    names = User.pluck(:name)
    (1.9ms)  SELECT "users"."name" FROM "users"
    
    names 
    => ["foo", "bar"]
    
[/code]

上記のように`XXX Load`と表示されるものとされないものの違いをご存知の方がいたらご教示いただけませんでしょうか？


CC BY-SA 4.0
2022-03-16T04:25:01.707
86853
2022-03-16T13:08:41.880
2022-03-16T05:10:21.827
40650
40650
question
ruby-on-rails rails-activerecord
DBアクセス時にログにLoadと出るものと出ないものの違いは？


クエリの結果として`User`オブジェクトが作られるか作られないかの違いです。(たしか)

Railsの基本はモデルオブジェクトを利用することですが、`#pluck`はモデルオブジェクトを作らないので単純に値がほしいときには高速です。


CC BY-SA 4.0
2022-03-16T13:08:41.880
86859
2022-03-16T13:08:41.880
5793
86853
answer