Django中foo.objects.latest('id')与last()哪个查询速度更快?
Django 获取数据表最新数据:
latest() vs last() 性能对比 核心结论
- 两者性能几乎完全一致,最终生成的SQL查询逻辑相同,都是基于指定(或默认)字段倒序获取第一条数据。
- 不需要结合
get()方法使用,这两个方法本身就直接返回单条模型实例,当找不到数据时都会抛出DoesNotExist异常,和get()的异常行为一致。
详细分析
foo.objects.latest("id")- 明确指定按
id字段倒序排序,取第一条数据,对应的SQL大致为:SELECT * FROM foo ORDER BY id DESC LIMIT 1; - 适合你明确以
id(自增主键)作为“最新”判断标准的场景,毕竟自增主键的最大值就是最新插入的数据。
- 明确指定按
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
相关产品推荐
相关产品推荐

