ActiveRecord consulta mucho más lento que el SQL directo?

He estado trabajando en la optimización de las llamadas a la base de datos de mi proyecto y noté una diferencia "significativa" en el rendimiento entre las dos llamadas idénticas a continuación:

connection = ActiveRecord::Base.connection()
pgresult = connection.execute(
  "SELECT SUM(my_column)
   FROM table
   WHERE id = #{id} 
   AND created_at BETWEEN '#{lower}' and '#{upper}'")

y la segunda versión:

sum = Table.
      where(:id => id, :created_at => lower..upper).
      sum(:my_column)

El método que usa la primera versión en promedio tarda 300 ms en ejecutarse (la operación se denomina un par de miles de veces dentro de ella), y el método que usa la segunda versión toma aproximadamente 550 ms. Eso es casi el 100% de disminución de la velocidad.

Revisé dos veces el SQL generado por la segunda versión, es idéntico al primero, con la excepción de que precede columnas de la tabla con el nombre de la tabla.

¿Por qué la desaceleración? ¿La conversión entre ActiveRecord y SQL realmente hace que la operación sea casi 2x?¿Debo limitarme a escribir SQL directo (tal vez incluso un sproc) si necesito realizar la misma operación un montón de veces y no quiero tener un costo elevado?

¡Gracias!

Respuestas a la pregunta(1)

Su respuesta a la pregunta