我知道如果我运行此查询
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
)