我有一个有趣的问题: 我有一个函数,它以逗号分隔整数字符串。
以下是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之前的176)。
为什么呢?我想MyTable中的列ID上的PK是原因 - SQL更喜欢在密钥上运行。
我是对的吗?
答案 0 :(得分:2)
选择保证不对结果进行排序,因此每次运行时甚至不能保证结果相同,但在您的情况下,由于数据太小,它们将是相同的。订单对于优化器来说是最方便的,所以你的猜测在这里可能是正确的。
在更高的数据量上,查询可以在不同的执行线程中进行拆分,因此提供更加混乱的顺序,并且根据服务器上的工作负载在运行之间可能会有所不同。
要获得一致的顺序,您必须使用ORDER BY
子句。