2016-03-15 2 views
-1

Я ищу, чтобы ускорить один из моих запросов в моем приложении rails.Rails. Где используется между vs больше/меньше

Сейчас я использую .where(['num_units >= ? and num_units <= ?',min_units,max_units])

Будет ли это быстрее или более выгодным, чтобы изменить его .where(num_units: min_units..max_units)?

Это, кстати, в Rails 4.

Редактировать: Я понял, что, скорее всего, мне нужно будет индексировать столбец для того, что мне нужно, что сильно ускоряет этот запрос. И один из моих коллег сообщил мне, что они в значительной степени идентичны

+0

Даже после вашего обновления все еще кажется, что @Mtarantini ответил на ваш вопрос. Не уверен, что еще вы ищете здесь, так как считаете, что все, что вам нужно, было индексом num_units в любом случае. –

ответ

1

Я хотел бы проверить запросы, чтобы увидеть, какой из них самый быстрый, проверяя их таким образом:

Benchmark.measure do 
    100000.times do 
    # Change 'Class' to your class name. 
    Class.where('num_units >= ? and num_units <= ?', min_units, max_units) 
    end 
end 

Benchmark.measure do 
    100000.times do 
    Class.where('num_units BETWEEN ? AND ?', min_units, max_units) 
    end 
end 

Benchmark.measure do 
    100000.times do 
    Class.where(num_units: min_units..max_units) 
    end 
end 

Времена, что я вернулся в мой локальное тестирование, следуя выше порядке:

  1. @ реальный = 3,280792
  2. @ реальный = 3,312653
  3. @ реальный = 3,709074
+0

Спасибо за ваш ответ, но один из моих сотрудников сказал мне, что они по сути то же самое. Мне действительно нужен был индекс num_units. –

+0

Исправить. Вот что показывает бенчмаркинг. Разница в скорости не является существенной. – MTarantini

Смежные вопросы