Sql server 标识列并在查询中使用order by

Sql server 标识列并在查询中使用order by,sql-server,sql-server-2008-r2,Sql Server,Sql Server 2008 R2,我使用SQL Server 2008 R2,有一个表,其id列为identity(1,1)。若要获取按id排序的查询列,则必须使用按id排序,否则不需要 编辑: 我在ID列上有一个唯一的聚集索引。执行此索引可确保我的查询在默认情况下按id排序。没有默认排序顺序。即使该表具有聚集索引,也不能保证按该顺序获得结果 必须将ORDER BY子句指定为所需的排序顺序。如果忽略ORDER BY,则顺序不可预测。因为这样的SQL语句不要求明确的顺序,所以SQL Server可以在结果准备就绪时返回结果 这意味

我使用SQL Server 2008 R2,有一个表,其
id
列为
identity(1,1)
。若要获取按id排序的查询列,则必须使用
按id排序
,否则不需要

编辑:
我在ID列上有一个唯一的聚集索引。执行此索引可确保我的查询在默认情况下按id排序。

没有默认排序顺序。即使该表具有聚集索引,也不能保证按该顺序获得结果


必须将
ORDER BY
子句指定为所需的排序顺序。

如果忽略ORDER BY,则顺序不可预测。因为这样的SQL语句不要求明确的顺序,所以SQL Server可以在结果准备就绪时返回结果

这意味着:

  • 订单完全取决于执行计划

  • 为某些筛选条件返回的顺序在其他方面可能有所不同 案例

  • 聚集索引在某些情况下甚至可以用于某些执行计划。在这些情况下(不使用时),不考虑其顺序
对于某些情况,select可以用于其他覆盖索引(不是按ID排序)。这将导致“意外”的订单


如果我们需要获得排序列表,我们必须使用显式ORDERBY子句。那我们就可以确定订单了。只有这样。

当不使用“ORDER BY”时,表的顺序不受保证。

你的意思是表默认按ID排序吗?如果你想按ID排序,请指定它。@codingbiz:是的,我的查询默认按ID排序吗?我刚刚更新了我的答案以跟随你的编辑。在某些情况下无法使用聚集索引。这意味着,它的顺序根本没有被评估。