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 theget_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()
.