You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django中foo.objects.latest('id')与last()哪个查询速度更快?

Django 获取数据表最新数据:latest() vs last() 性能对比

核心结论

  • 两者性能几乎完全一致,最终生成的SQL查询逻辑相同,都是基于指定(或默认)字段倒序获取第一条数据。
  • 不需要结合get()方法使用,这两个方法本身就直接返回单条模型实例,当找不到数据时都会抛出DoesNotExist异常,和get()的异常行为一致。

详细分析

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

    • 明确指定按id字段倒序排序,取第一条数据,对应的SQL大致为:SELECT * FROM foo ORDER BY id DESC LIMIT 1;
    • 适合你明确以id(自增主键)作为“最新”判断标准的场景,毕竟自增主键的最大值就是最新插入的数据。
  2. foo.objects.last()

    • 行为依赖模型的get_latest_by属性:
      • 如果模型没设置get_latest_by,会默认按主键字段倒序取最后一条,此时和latest("id")效果完全相同;
      • 如果模型设置了get_latest_by = "create_time"(比如用创建时间判断最新),那last()会按create_time倒序取第一条,等价于latest("create_time")。

关键优化点

真正影响查询速度的不是选哪个方法,而是确保你用来排序的字段(id、create_time等)已经建立了数据库索引,索引能让数据库快速定位到最大/最新的那条数据,避免全表扫描。

内容的提问来源于stack exchange,提问作者webdeveloper

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 00:50:38