我正在使用以下查询来查询在两列上有订单的数据库。
从表1中选择a,b,c按asc,b asc;
排序
我的问题是,排序是否保证稳定(按标准)。虽然它没有任何意义,但不稳定,但我问这个,因为我在网上读到了
该标准并不妨碍使用稳定的排序,但它也是如此 不需要它。
答案 0 :(得分:8)
不保证排序稳定。我认为SQL Server documentation对如何实现稳定排序有一个很好的解释:
使用OFFSET和查询请求之间获得稳定的结果 FETCH,必须满足以下条件: 查询使用的基础数据不得更改。也就是说,要么触摸行 由查询未更新或来自查询的所有页面请求 使用快照或在单个事务中执行 可序列化的事务隔离。有关这些的更多信息 事务隔离级别,请参阅SET TRANSACTION ISOLATION LEVEL (的Transact-SQL)。 ORDER BY子句包含列或组合 保证唯一的列。
理解排序不稳定的最简单方法是返回表的定义。表在SQL中本质上是无序的。因此,没有任何顺序可以依靠“稳定性”。
作为第二个考虑因素,可以并行实施分类。在大多数并行排序中,公共密钥被放在一起而没有关于其原始顺序的信息(除非在排序键中实现,无论是显式还是隐式)。