是否按时间字段(其中 auto_now_add=True)对表进行排序,相当于按所述表的主键 ID 对表进行排序?

Posted

技术标签:

【中文标题】是否按时间字段(其中 auto_now_add=True)对表进行排序,相当于按所述表的主键 ID 对表进行排序?【英文标题】:Is sorting a table by a time field (where auto_now_add=True), equivalent to sorting it by the said table's primary key ID? 【发布时间】:2015-11-11 03:44:03 【问题描述】:

想象一个具有time_of_insert 属性的数据库表,该属性由每次INSERT 的当前时间自动填充(例如,在Django 模型的示例中,该属性具有auto_now_add=True)。

在这种情况下,按time_of_insert 对所述表进行排序是否等同于按每一行的ID(主键)对其进行排序?

背景:我问是因为我有一个表,其中有一个自动创建的time_of_insert 属性。我目前正在按time_of_insert 对上述表格进行排序;此字段未编入索引。我觉得我可以简单地按id 对其进行排序,而不是对time_of_insert 进行索引 - 这样我可以获得快速的结果,并且我不必承担索引另一个表列的开销。我的数据库是 postgres。

我错过了什么?

【问题讨论】:

对于大多数应用程序来说应该足够接近。可能存在一些竞争条件,尤其是在并行数据库上。这在很大程度上取决于如何创建插入时间和 id,这高度依赖于数据库。 【参考方案1】:

现在不是了。

id 保证唯一性。而您的日期时间列没有。

因此,如果有 2 行具有相同的 time_of_insert 值 - 则无法保证结果集的顺序。

【讨论】:

@HassanBaig 我建议您同时按ORDER BY time_of_insert, id 排序

以上是关于是否按时间字段(其中 auto_now_add=True)对表进行排序,相当于按所述表的主键 ID 对表进行排序?的主要内容,如果未能解决你的问题,请参考以下文章

启用了 auto_now_add 选项的 DateTimeField 是不是必须在夹具中具有值

Django REST Group按日期时间字段分为今天,昨天等

Django admin自定义字段按条件获取最新相关对象的结果

Django - 后台admin不显示带auto_now, auto_now_add选项的字段

Django在具有多个值的多个字段中搜索

Django中的日期和时间DateField.auto_nowDateField.auto_now_add