按性能随机排序

kum*_*mar 5 t-sql

top n通过随机顺序获取行的最佳方法是什么?
我使用的查询如下:

Select top(10) field1,field2 .. fieldn
from Table1
order by checksum(newid())
Run Code Online (Sandbox Code Playgroud)

上述查询中的问题是随着表大小的增加它会继续变慢.它将始终执行完整聚簇索引扫描以top(10)按随机顺序查找行.

还有其他更好的方法吗?

Ada*_*son 0

不,这里没有办法提高性能。由于您希望行按“随机”顺序排列,因此索引将毫无用处。但是,您可以尝试按而newid()不是校验和进行排序,但这只是对随机排序的优化,而不是排序本身。

服务器无法知道您想要从表中随机选择 10 行。该查询将计算order by表中每一行的表达式,因为它是无法由索引值确定的计算值。这就是您看到完整聚集索引扫描的原因。