2013-12-16 4 views
0

У меня есть приложение rails3, в котором я пытаюсь оптимизировать некоторые SQL-запросы.Rails 3: оптимизация запроса выбора ActiveRecord

Is, User.select([:id, name]).all, быстрее чем User.all?

+0

да потому User.select ([: номер, имя]). Все выбирает только номер, имя, где, как User.all выбирает все столбцы –

+0

Ok, но с выбором, существует дополнительный метод call и mysql должны искать соответствующий столбец. –

+0

@ JérémyPouyet Дополнительного вызова не требуется. 'User.all' переводит' select * from users', тогда как 'User.select ([: id, name]). All' переводит на' select id, name from users' – Catfish

ответ

1

Да User.select([:id, :name]).all быстрее User.all

  1. select id, name from users просто быстрее, чем select * from users
  2. Все возвращенные записи обернут AR так, вероятно, инициализирует объект только с 2 значениями (ID, имя) потребуется меньше времени.

    1.9.3p448 :002 > Benchmark.measure {User.select([:id, :name]).all } 
    => 0.340000 0.010000 0.350000 ( 0.348017) 
    
    1.9.3p448 :003 > Benchmark.measure {User.all } 
    => 0.770000 0.060000 0.830000 ( 0.935314) 
    
Смежные вопросы