【发布时间】:2012-12-09 22:45:26
【问题描述】:
所以我有一个有趣的问题,我不确定是否被视为“黑客”。我查看了一些问题,但没有找到重复的问题,所以在这里。基本上,我需要知道这是否不可靠或被认为是不好的做法。
我有一个非常简单的表,它有一个唯一的自动递增 id 和一个 created_at 时间戳。 (我的问题的简化版本以澄清相关概念)
+-----------+--------------------+
| id |created_at |
+-----------+--------------------+
| 1 |2012-12-11 20:35:19 |
| 2 |2012-12-12 20:35:19 |
| 3 |2012-12-13 20:35:19 |
| 4 |2012-12-14 20:35:19 |
+-----------+--------------------+
这两列都是动态添加的,因此可以说新的“插入”将总是具有更大的 id,而总是具有更大的日期。 p>
目标 - 非常简单地获取由 created_at 降序排列的结果
解决方案一 - 按日期降序排列的查询
SELECT * FROM tablename
ORDER BY created_at DESC
解决方案二 - 按 ID 降序排列的查询
SELECT * FROM tablename
ORDER BY id DESC
解决方案二是否被认为是不好的做法?或者解决方案二是正确的做事方式。当我试图理解这个概念时,对你的推理的任何解释都会非常有帮助,而不仅仅是简单地得到答案。提前致谢。
【问题讨论】:
-
嗯,按 id 排序可以并且将利用索引。您应该在问题中包含架构的相关部分。
-
虽然我不知道是否有“官方方式”来解决这个问题,但“order by”查询的存在就是为了做到这一点。按列排序。我看到的唯一缺点是,时间戳可能有重复(在同一秒内插入两次)并且由于缺少索引,查询可能会更慢。
标签: mysql sql database query-optimization