0
由於對象構造的成本,我知道pluck
比使用select
或mapping object
更高效。 但我發現pluck
不使用ActiveRecord_Associations_CollectionProxy
的緩存。例如:'pluck'每次都重新獲取緩存的關聯?
irb(main):001:0> u = User.take
irb(main):002:0> puts Benchmark.measure { u.rides.map(&:id) }
Ride Load (1.3ms) SELECT "rides".* FROM "rides" WHERE "rides"."user_id" = $1 ORDER BY "rides"."created_at" DESC [["user_id", 1]]
0.040000 0.020000 0.060000 ( 0.072337)
irb(main):003:0> puts Benchmark.measure { u.rides.map(&:id) } # once again, fetching data from the cache
0.000000 0.000000 0.000000 ( 0.000103)
irb(main):004:0> puts Benchmark.measure { u.rides.pluck(&:id) }
(1.6ms) SELECT "rides"."id" FROM "rides" WHERE "rides"."user_id" = $1 ORDER BY "rides"."created_at" DESC [["user_id", 1]]
0.010000 0.010000 0.020000 ( 0.020381)
irb(main):005:0> puts Benchmark.measure { u.rides.pluck(&:id) } # once again, refetch data from database
(1.5ms) SELECT "rides"."id" FROM "rides" WHERE "rides"."user_id" = $1 ORDER BY "rides"."created_at" DESC [["user_id", 1]]
0.010000 0.010000 0.020000 ( 0.020810)
這是正常的嗎?用這種方法使用mapping
或select
而不是pluck
更好嗎?
順便說一下,我正在使用Rails-4。
最新通報
我不知道這是一個錯誤,它似乎是由Rails的固定5. rails/rails#25976
我不知道'pluck'不能處理緩存關聯。國際海事組織,我想它應該是,爲什麼'pluck'不支持這個功能? – HFX
它適用於Rails 5。 – HFX