我知道如果我运行此查询

select top 100 * from mytable order by newid()

它将从我的桌子上获得100个随机记录。

然而,我对它是如何工作的有点困惑,因为我没有看到newid()在里面select列表。有人可以解释吗?有什么特别的东西吗newid()这里?

答案

我知道newid()在做什么,我只是想了解它在随机选择中的帮助。是否是(1)选择语句将从MyTable中选择所有内容,(2)选择每行,在Newid()生成的唯一识别仪上进行钉,((3)通过此唯一的Indidentifier对行进行排序,(4)选择顶部从排序列表中的100?

是的。这几乎完全正确(除了它不一定需要排序全部行)。您可以通过查看实际执行计划来验证这一点。

SELECT TOP 100 * 
FROM master..spt_values 
ORDER BY NEWID()

计算标量操作员添加了NEWID()每行的列(我的示例查询中的表中的2506中)然后,该列中的行与所选的前100列对排序排序。

SQL Server实际上不需要从位置100向下分类整个集合,因此它使用了TOP N排序操作员试图在内存中执行整个排序操作(对于少量值N

Plan

来自: stackoverflow.com