我知道如果我运行此查询
select top 100 * from mytable order by newid()
它将从我的表中获得100条随机记录。
但是,我对它的工作方式有些困惑,因为在
newid()
列表中没有看到select
。有人可以解释吗?这里的newid()
有什么特别之处吗? 最佳答案
是。这几乎是完全正确的(除了不一定需要对所有行进行排序)。您可以通过查看实际的执行计划来验证这一点。
SELECT TOP 100 *
FROM master..spt_values
ORDER BY NEWID()
计算标量运算符为每行添加
NEWID()
列(在我的示例查询中为表中的2506),然后按此列对表中的行进行排序,并选择前100个列。SQL Server实际上不需要从位置100向下对整个集合进行排序,因此它使用了
TOP N
排序运算符,该运算符尝试在内存中执行整个排序操作(for small values of N
)关于sql-server - “order by newid()”-如何运作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4979799/