È possibile utilizzare il the Benchmark module per indagare facilmente, ad es .:
require 'benchmark'
n = 50000
Benchmark.bm do |x|
x.report('maximum') { n.times.do; v1; end }
x.report('order-pluck') { n.times do; v2; end }
end
def v1
clear_cache
Model.maximum(:updated_at)
end
def v2
clear_cache
Model.order(:updated_at).pluck(:updated_at).last
end
def clear_cache
ActiveRecord::Base.connection.query_cache.clear
end
per rendere la pena fare questo con n> 1 dovrete cancellare le varie cache che potrebbero essere coinvolti. Potrebbe esserci una cache nel tuo server db, separata dalla cache di ActiveRecord. Ad esempio per cancellare la cache Mysql è possibile chiamare:
`mysql mydb -e 'RESET QUERY CACHE'`
La seconda query ha generato un errore 'ordine metodo non definito per #' per me. –
Pavan
@Pavan Hai ragione, ho aggiornato la mia domanda. – Nanego