ORDER BY id或date_created显示最新结果?

时间:2011-04-06 18:05:52

标签: mysql sql database sql-order-by

我有一张桌子(实际上有几张),我想先用最新的条目得到结果。以下是我的ORDER BY子句选项:

  • date_created INT(永不改变值)
  • id(当然是INT AUTO_INCREMENT!)

两列都应该同等地表示记录的插入顺序。我自然会像任何理智的人一样使用date_created字段,但我仍然对此感到好奇。

我知道这可能是分裂的头发,但是为什么我不应该使用id列是否有任何理由或边缘情况?

编辑:我认为这个问题对于我们想要真正代表插入顺序的值是模糊的。感谢大家的所有答案,我将接受最好的答案并继续前进,因为我认为我已经通过假设id总是按顺序使这变得困难(参见@Wrikken的评论)。我的直觉是开发人员永远不应该考虑id,这就是大多数答案都指向的内容。

5 个答案:

答案 0 :(得分:4)

依赖ID列进行时间排序并不是一个好主意,因为这不是它的目的。基本上,ID只是该行的唯一键,仅此而已。使用ID可能永远不会导致问题,但没有理由增加假设按ID排序将始终保持的复杂性。例如,您将来可能希望删除条目,然后手动插入新条目,或者从过去加上时间戳的其他源中导入条目。如果您没有date_created列,那么ID将是您唯一的选择,但由于您拥有该列,因此使用它,因为它是您的最佳选择。

答案 1 :(得分:2)

一般情况下,如果您已经有一个专门用于创建时间的字段,则不应该依赖ID。也许在碰撞的情况下(在完全相同的时刻创建记录),您可以使用ID作为次要订单子句。

答案 2 :(得分:2)

一个很好的理由,作为一项规则 - 因为您(或继承您的应用程序的人)可以追溯性地插入具有较旧时间戳的记录(即,明确将时间戳设置为过去的某个而不是当前的时间戳)。您不能总是依赖与时间戳排序匹配的ID排序。

答案 3 :(得分:1)

假设date_created永远不会被触及(你已经声明它没有)我认为按ID列排序在性能方面会更好。据推测,ID列是您的pkey,因此已经编入索引。没有理由不使用它进行分类。我知道已经提出你应该总是使用日期订购,但老实说,在这种情况下我会使用ID。

答案 4 :(得分:-1)

假设您在id上运行了正整数,并且您将自动增量更改为使用负数。您的ID订单不会首先返回最新记录。

嘿,你问了一个边缘案例! ; - )