admin

快速从sqlserver中选择随机抽样

sql

我有一个大于1000万行的巨大表。我需要从中有效地获取5000个随机样本。我有一些限制因素,使我想要的总行数减少到9密耳。

我尝试通过NEWID()使用order,但是该查询将花费很长时间,因为它必须对所有行进行表扫描。

有没有更快的方法可以做到这一点?


阅读 192

收藏
2021-05-10

共1个答案

admin

如果您可以使用伪随机抽样并且您使用的是SQL Server 2005/2008,则请看一下TABLESAMPLE。例如,SQL Server 2008 /
AdventureWorks 2008中的一个示例基于行:

USE AdventureWorks2008; 
GO


SELECT FirstName, LastName
FROM Person.Person 
TABLESAMPLE (100 ROWS)
WHERE EmailPromotion = 2;

问题在于,TABLESAMPLE并不是完全随机的,因为它会从每个物理页面生成给定数量的行。除非您也限制TOP,否则您可能无法准确返回5000行。如果您使用的是SQL
Server 2000,则必须生成一个与主键匹配的临时表,或者必须使用使用NEWID()的方法来执行此操作。

2021-05-10