1

我有一个查询,我在 sqlconnection 上执行并从 SqlCommand.ExecuteReader 创建一个阅读器。我正在做一个简单的 Select * from table。我没有使用 order by,但是在 management studio 中运行时查询的结果总是以相同的顺序返回。1 2 3 4 但是当我执行 reader.Read() 时,顺序不一样。我看到一个随机记录被拉出。3 2 4 1 有人知道为什么会发生这种情况吗?

4

1 回答 1

4

如果你不说 ORDER BY,ADO.NET 可以自由地以它想要的任何顺序返回行。你为什么抱怨?

人们经常错误地认为,如果没有 ORDER BY,行的顺序将是聚集索引......或者如果他们使用 GROUP BY,它将按照这个顺序......或其他任意规则。

这些假设有时成立,有时不成立,而且总是依赖于实施细节和具体的执行计划。

获得有保证的结果排序的唯一方法是使用 ORDER BY。其他任何事情都是错误的,或者您不关心订单。

顺便说一句,这并不总是意味着排序的性能下降。SQL Server 非常聪明,如果它知道行已经排序(例如,因为它根据您的 ORDER BY 列从索引中读取它们),它将什么也不做。

于 2013-06-20T16:21:44.350 回答