2013-02-26 85 views
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 

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

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

对不对?

回答

2

选择保证不排序的结果,所以你的结果甚至不保证每次运行时都是一样的,但在你的情况下,因为数据太小,它们将是相同的。顺序对于优化器来说是最方便的,所以你的猜测在这里可能是正确的。

对于更高数据量的查询可以跨不同的执行线程进行拆分,因此给出更混乱的顺序,并且根据服务器上的工作负载可能会因运行而有所不同。

要获得一致的订单,您必须使用ORDER BY条款。