10

我正在使用以下查询来查询在两列上有 order by 的 DB。

SELECT a,b,c from Table1 Order By a asc, b asc;

我的问题是,排序是否保证稳定(按标准)。虽然它没有任何意义,不稳定,但我问这个是因为我在网上读到

该标准不阻止使用稳定排序,但它也不需要它。

4

1 回答 1

12

不能保证排序是稳定的。我认为 SQL Server文档对如何实现稳定排序有很好的解释:

要在使用 OFFSET 和 FETCH 的查询请求之间获得稳定的结果,必须满足以下条件: 查询使用的基础数据不得更改。也就是说,查询所涉及的行没有更新,或者查询中的所有页面请求都使用快照或可序列化事务隔离在单个事务中执行。有关这些事务隔离级别的详细信息,请参阅 SET TRANSACTION ISOLATION LEVEL (Transact-SQL)。ORDER BY 子句包含保证唯一的列或列组合。

理解排序不稳定的最简单方法是回到表的定义。SQL 中的表本质上是无序的。因此,没有命令可以依靠“稳定性”。

作为第二个考虑,排序可以并行实现。在大多数并行排序中,公共键被放在一起,没有关于它们的原始顺序的信息(除非在排序键中显式或隐式地实现)。

于 2013-03-20T13:12:11.523 回答