1

我有一个有趣的问题:我有一个函数可以得到一个逗号分隔的整数字符串。

这里有2个处决:

select ID from dbo.udf_NumList2table ('124,126,132,180,176')
select RP.ID, My.ID 
from dbo.udf_NumList2table ('124,126,132,180,176') RP join MyTable My
        on RP.ID=My.ID

在第一次执行中,结果的顺序就像字符串中数字的顺序一样。在第二次执行中,结果的顺序是升序的(176 在 180 之前)。

为什么?我猜想 MyTable 中列 ID 上的 PK 是原因 - SQL 更喜欢在键上运行。

我说得对吗?

4

1 回答 1

2

Select 保证不会对结果进行排序,因此甚至不能保证每次运行时您的结果都相同,尽管在您的情况下,由于数据非常小,它们将是相同的。这个顺序对优化器来说是最方便的,所以你的猜测在这里很可能是正确的。

在数据量更大的情况下,查询可以在不同的执行线程中拆分,因此会给出更混乱的顺序,并且根据服务器上的工作负载,运行之间可能会有所不同。

要获得一致的顺序,您必须使用ORDER BY子句。

于 2013-02-26T09:27:24.907 回答