0

我知道(没有order by子句)SQL 不对结果集的顺序做出任何保证。但是,对于涉及一个或多个连接的查询,我可以对结果集中相关项的连续性做出任何假设吗?

例如,如果我有类似的查询

select * from A left join B on P(x) left join C on Q(x)

我可以假设与特定行对应的所有记录A在结果集中都是连续的吗?

4

1 回答 1

1

你不能。除非有order by子句,否则永远不会指定查询的结果。

这是一个实际示例,结果不连续。并行散列连接根据连接键将不同处理器上的表分开。然后在结果可用时对其进行编译。所以一些结果来自一个处理器,一些来自另一个处理器,依此类推。

或者,在另一种情况下,您可能正在使用索引查找。但是,SQL Server 可能决定在 A 而不是 B 上使用索引——并在 B 而不是 A 中顺序遍历行。相同的 id 可能在表 B 中出现多次。因此,给定的行 A 可能会出现在 B.id = A.id 的结果中。

于 2013-04-21T03:18:41.333 回答