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