没有指定 ORDER BY 时结果是怎样的?

作者:vkvi 来源:ITPOW(原创) 日期:2009-4-24

在 SQL Server 中,如果一个 SQL 语句没有指定 ORDER BY 子句,结果是怎样的呢?

有人说是按物理存储顺序。其实这是不对的。

建立一个表

  • 有一个 id 和一些字段;
  • id 是主键(含聚集);
  • 将其他所有字段(也可以含 id)组合起来建唯一约束。

查询

我们可能会发现结果是按约束中指明的第一个字段来排的。

建更多的约束

建立更多的约束,也是将所有字段组合起来建,只是字段的顺序不同。

查询

我们可能会发现结果是按最后一个约束(按建立时间而不是约束名称)中指明的第一个字段来排序的。并不是按物理存储顺序 id。

可能?

前面在查询结果中用了“可能”一词,原因是:查询语句不同,可能会对排序造成影响;数据量不同,可能会对排序造成影响;机器配置不同,可能会对排序造成影响;SQL Server 版本不同,可能会对排序造成影响……

那么

可以发现没有指定 ORDER BY 时,我们无法确认结果的排序是怎样的,也许一点小小的改动,就会影响结果的排序。

如果我们认为有序的结果对我们有意义,那么请使用 ORDER BY 排序。虽然使用 ORDER BY 与不使用 ORDER BY 的结果可能相同;虽然使用 ORDER BY 也许更耗资源。但是至少,它返回的排序是可靠的。

相关文章