1

所以我今天写了一些查询,并top 10在查询中使用只是为了获取一些没有 an 的示例数据,orderby并注意到它实际上在每次调用时返回不同的数据。然而,它似乎不是随机的,因为它是一个包含数百万行的表,并且总是出现一些条目,而另一些则每次调用都会改变。当指定 no 时,后端会执行什么逻辑来决定返回哪些行orderby?我正在使用 SQL Server 2008r2,但如果它在其他数据库中的处理方式不同,我会很感兴趣。

4

1 回答 1

2

当然,顺序是完全未定义的。但我会尝试在实际实现中提及一些实际原因,因为这是明确要求的。这是一个小样本:

  • 并行查询计划
  • 以随机顺序返回的预读结果
  • 执行计划因某种原因而改变
  • 读取列存储索引按内部顺序返回行
  • SQL Server 正在选择无序索引扫描,它按分配顺序而不是逻辑顺序读取页面(例如,分配顺序可以通过重组表来改变)

这些原因是特定于 SQL Server 的。

于 2012-06-14T22:54:28.427 回答