SqlDataReader读取与查询不同的顺序

时间:2013-06-20 16:09:38

标签: sql ado.net

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

1 个答案:

答案 0 :(得分:3)

如果您没有说ORDER BY,ADO.NET可以按任何顺序自由返回行。你为什么抱怨?

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

这些假设有时会持有,有时并非总是依赖于实施细节和具体的执行计划。

获得结果保证排序的唯一方法是使用ORDER BY。还有别的错误,或者你不关心订单。

BTW,这并不总是意味着排序的性能损失。 SQL Server非常聪明,如果它知道行已经排序(例如,因为它根据你的ORDER BY列从索引中读取它们),它将什么都不做。