ActiveRecord запрос намного медленнее, чем прямой SQL?

Я работал над оптимизацией вызовов БД моего проекта, и я заметил "значительный" разница в производительности между двумя одинаковыми вызовами ниже:

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

и вторая версия:

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

Для метода, использующего первую версию, в среднем требуется 300 мс (операция вызывается в общей сложности пару тысяч раз), а метод, использующий вторую версию, занимает около 550 мс. Это почти на 100% снижает скорость.

Я дважды проверил SQL, сгенерированный второй версией, он идентичен первому, за исключением того, что он предшествует столбцам таблицы с именем таблицы.

Why the slow-down? Is the conversion between ActiveRecord and SQL really making the operation take almost 2x? Do I need to stick to writing straight SQL (perhaps even a sproc) if I need to perform the same operation a ton of times and I don't want to hit the overhead?

Спасибо!

Ответы на вопрос(1)

Ваш ответ на вопрос