Использование Benchmark ips Я проверил это испытание. Исправьте меня, если я ошибаюсь в том, что я только что испытал. Обратите внимание, что 96 - это идентификатор первого пользователя в моем db.Rails 5 - первый раз, где предел 1 против
Benchmark.ips do |x|
x.report("first") do
User.first
end
x.report("where") do
User.where(id: 96).limit(1)
end
x.report("find") do
User.find(96)
end
x.compare!
end
Я побежал этот тест несколько раз и получил это как результат
Comparison:
where: 26430.8 i/s
first: 999.8 i/s - 26.44x slower
find: 964.3 i/s - 27.41x slower
Моего conclussion это всегда использовать, где вместо того, чтобы найти или первое, поскольку они гораздо медленнее способы получить конкретный пользователь ,
Rails 5.0.0.1, PostgreSQL 9.5.3, Ruby 2.3.1
На самом деле вы не выполняете запрос «где». Вероятно, если вы добавите '.to_a' до конца, он действительно запустится. –