Objects.last() или objects.latest('id')? Что быстрее? (django)

мне нужно получить последние данные таблицы в django, но я хочу найти самый быстрый способ сделать это.

какой из них самый быстрый?

foo.objects.latest("id")
foo.objects.last()

или я должен использовать get() с одним из вышеперечисленных методов?

Если в вашей Foo модели не указана get_latest_by опция модели [Django-doc], то эти два варианта эквивалентны. Действительно, как обсуждалось в моем ответе о разнице между .last() и .latest():

  • .first() and .last() will work with the ordering of the queryset if there is one, .earliest(…) and .latest(…) will omit any .order_by(…) clause that has already been used;
  • if the queryset is not ordered .first() and .last() will order by the primary key and return the first/last item of that queryset, .earliest(…) and .latest(…) will look for the get_latest_by model option [Django-doc] if no fields are specified;

Если get_latest_by таким образом не указан, или первичный ключ, то оба запроса приведут к запросу, который будет выглядеть следующим образом:

SELECT *
FROM foo
ORDER BY id DESC
LIMIT 1

Оба метода не эквивалентны, но в данном случае будут производить один и тот же запрос, а значит, оказывать одинаковое воздействие на базу данных.

или я должен использовать get() с одним из вышеперечисленных методов?

Нет, .last и .latest() являются eager методами, они будут непосредственно выполнять запрос и возвращать Foo объект (или None), поэтому нет смысла вызывать .get(), так как модель не имеет определенного для нее метода .get().

Вернуться на верх