我有一个查询,我在sqlconnection上执行并从SqlCommand.ExecuteReader创建一个阅读器。我正在从表中做一个简单的Select *。我没有使用订单,但在管理工作室中运行查询的结果总是以相同的顺序返回。 1 2 3 4 但是,当我做一个reader.Read()时,顺序是不一样的。我看到随机记录被拉出来了。 3 2 4 1 任何人都知道为什么会发生这种情况?
答案 0 :(得分:3)
如果您没有说ORDER BY,ADO.NET可以按任何顺序自由返回行。你为什么抱怨?
人们经常错误地认为没有ORDER BY行的顺序就是聚集索引......或者如果他们使用GROUP BY,它将按此顺序......或其他任意规则。
这些假设有时会持有,有时并非总是依赖于实施细节和具体的执行计划。
获得结果保证排序的唯一方法是使用ORDER BY。还有别的错误,或者你不关心订单。
BTW,这并不总是意味着排序的性能损失。 SQL Server非常聪明,如果它知道行已经排序(例如,因为它根据你的ORDER BY列从索引中读取它们),它将什么都不做。