是否按时间字段(其中 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自定义字段按条件获取最新相关对象的结果