100k行以随机顺序返回,请不要SQL时间

Joe*_*Joe 5 sql-server random sql-server-2005

好,

我去年已经做了很多关于返回随机行集的阅读,而我们提出的解决方案是

ORDER BY newid()
Run Code Online (Sandbox Code Playgroud)

这适用于<5k行.但是,当我们获得超过10-20k的行时,我们正在获得SQL超时,执行计划告诉我,76%的查询成本来自此行.当我们有大量行时,删除这一行会使速度增加一个数量级.

我们的用户需要一次这样做多达10万行.

为您提供更多详细信息.

我们有一个包含260万个4位字母数字代码的表格.我们使用随机的一组进入场地.例如,如果我们有一个容量为5000的事件,那么将从表格中抽取5000个这样的随机集合,然后作为条形码发给每个客户,然后门口的条形码扫描应用程序5000的相同列表.使用4位字母数字代码(而不是像GUID这样的愚蠢的长数字)的原因是人们很容易将数字写下来(或将其发送给朋友)并且只是带来编号并手动输入,因此我们不需要大量字符.客户喜欢最后一点btw.

有没有更好的方法ORDER BY newid(),或者有更快的方法从2.6 mil的表中获得100k随机行?

哦,我们正在使用MS SQL 2005.

谢谢,

adr*_*nks 7

有一篇题为" 从大表中随机选择行 "的MSDN文章讨论了这个确切的问题并显示了一个解决方案(不使用排序,而是在生成的列上使用WHERE子句来过滤行).

查询速度慢的原因是该ORDER BY子句导致整个表被复制到tempdb中进行排序.


Ano*_*on. 3

如果您想生成随机 4 位代码,为什么不直接生成它们而不是尝试从数据库中提取它们呢?

生成从 0 到 1,679,616 的 100k 个唯一数字(这是唯一的四位字母数字代码的数量,忽略大小写 - 260 万行必须有一些重复项)并将它们转换为您的四位代码。