gpt4 book ai didi

sql-server - 按 ID(int PK)排序与创建时间

转载 作者:搜寻专家 更新时间:2023-10-30 22:09:42 24 4
gpt4 key购买 nike

假设我有博客文章评论。在插入时,它们将当前的 utc 日期时间作为它们的创建时间(通过 sysutcdatetime 默认值)并获得一个 ID(通过作为 PK 的整数标识列)。

现在我想按年龄降序排列评论。只执行 ORDER BY ID 是否安全,还是需要使用创建时间?我正在考虑插入的“并发”提交和回滚以及已提交读取的隔离级别。是否有可能 ID 有时不代表插入顺序?

我问这个是因为如果按 ID 排序是安全的,那么我可以获得以下好处:

  • 我不需要创建时间的索引。
  • 按 ID 排序可能更快
  • 我不需要 datetime2 列的高精度,因为无论如何只需要排序(为了不让两行具有相同的创建时间)。

This答案说当您没有创建时间时是可能的,但它总是安全的吗?

This回答说使用标识列是不安全的。但是当它也是 PK 时,答案给出了一个按 ID 排序的示例,但没有提及这是否安全。

编辑:

This答案建议按日期排序,然后按 ID 排序。

最佳答案

是的,ID 可能会困惑,因为 ID 生成不是插入事务的一部分。这是为了不序列化表上的所有插入事务。

最正确的排序方式是 ORDER BY DateTime DESC, ID DESC 并添加 ID 作为决胜局,以防多次生成相同的日期。各种决胜局对于获得确定性结果很重要。例如,您不希望多次刷新页面时显示不同的数据。

您可以在 DateTime DESC, ID DESC 上定义覆盖索引,并获得与按 CI 键(此处:ID)排序相同的性能。 CI 和 NCI 之间没有相关的物理差异。

既然你在某处提到了 PK,我想指出 PK 的选择不会影响任何这些。只有索引可以。查询处理器从不关心 PK 和唯一键。

关于sql-server - 按 ID(int PK)排序与创建时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34720247/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com