Consulta do ActiveRecord muito mais lenta que SQL simples?

Eu tenho trabalhado em otimizar as chamadas DB do meu projeto e notei uma diferença "significativa" no desempenho entre as duas chamadas idênticas abaixo:

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

e a segunda versão:

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

O método usando a primeira versão, em média, leva 300ms para executar (a operação é chamada um par de mil vezes o total dentro dela), e o método que usa a segunda versão leva cerca de 550 ms. Isso é quase 100% de diminuição na velocidade.

Eu verifiquei novamente o SQL que é gerado pela segunda versão, é idêntico ao primeiro, com exceção para que ele preceda as colunas da tabela com o nome da tabela.

Por que a desaceleração? A conversão entre ActiveRecord e SQL realmente faz com que a operação demore quase 2x?Eu preciso continuar escrevendo SQL direto (talvez até mesmo um sproc) se eu precisar executar a mesma operação várias vezes e não quiser atingir a sobrecarga?

Obrigado!

questionAnswers(1)

yourAnswerToTheQuestion