是结果的顺序 选择不同的...哪里。。。 "random" ?



我有一个SQL查询,它读取

SELECT DISTINCT [NR] AS K_ID 
FROM [DB].[staging].[TABLE]
WHERE [N]=1 and [O]='XXX' and [TYPE] in ('1_P', '2_I')

由于我将结果保存在一个受版本控制的CSV文件中(通过Python Pandas(,我注意到每次运行查询时结果的顺序都会发生变化。为了消除这里的Python部分,我在MS SQL Server Management Studio中运行了查询,在那里,每次尝试都会观察到不同的顺序。

在我的情况下,这并不重要,但:每次执行都可以对查询结果进行不同的排序,这正确吗?如果是这样的话,有没有一种方法可以使订单";确定性";?

SQL数据库基于关系代数集合论概念,其中您认为的表更正式地称为无序关系。除非指定了ORDER BY,否则数据库可以自由返回数据。数据的顺序是方便的。

此顺序可能与索引匹配,而不是与磁盘上的顺序匹配。如果数据库可以利用另一个查询已经在进行的工作来减少两者之间的总读取量,则它也可能在数据的中间启动(Enterprise Edition会这样做(。

更糟糕的是,甚至磁盘上的顺序也可能发生变化。如果没有主键,数据库甚至可以移动一个页面来帮助更高效地运行。

换句话说,如果顺序很重要(通常也很重要(,请指定一个ORDER BY子句。

SQL查询以无序集的形式返回结果,除非最外层的查询具有order by

在较小的数据量上,结果看起来是可重复的。然而,在较大的系统上,尤其是在并行系统上,排序可能基于哈希算法、节点何时完成以及网络拥塞(以及其他因素(。因此,实际上,每次运行时都可以看到不同的排序。

最新更新