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?Спасибо!