Usando directamente el método select_all de la conexión ActiveRecord devolverá un array de hash, ahorrando el tiempo de construcción de objetos.
Benchmark.bm{|x| x.report{100.times{BigTable.find(:all)}}}
user system total real
10.090000 2.090000 12.180000 ( 19.199150)
Benchmark.bmbm{|x| x.report{100.times{BigTable.connection.select_all('select * from big_table')}}}
user system total real
7.350000 2.080000 9.430000 ( 16.646406)
En general, no es buena idea guardar todos los elementos de una tabla grande en un array, pero aún seleccionando tan solo el índice se obtiene una mejora sustancial.
Benchmark.bm{|x| x.report{100.times{BigTable.find(:all, :select => :id)}}}
user system total real
0.610000 0.010000 0.620000 ( 0.707702)
Benchmark.bmbm{|x| x.report{100.times{BigTable.connection.select_all('select id from big_table')}}}
user system total real
0.080000 0.000000 0.080000 ( 0.161878)