【发布时间】:2010-02-23 23:53:02
【问题描述】:
好的,
去年我一直在阅读大量关于返回随机行集的内容,我们提出的解决方案是
ORDER BY newid()
这适用于 10-20k 行时,我们会遇到 SQL 超时,执行计划告诉我 76% 的查询成本来自这条线。当我们有大量行时,删除这条线会使速度提高一个数量级。
我们的用户需要像这样一次处理多达 100k 行。
为大家提供更多细节。
我们有一个包含 260 万个 4 位字母数字代码的表格。我们使用其中的一组随机来进入场地。例如,如果我们有一个容量为 5000 的活动,将从表中随机抽取 5000 个,然后作为条形码发给每个客户,然后门口的条形码扫描应用程序有相同的 5000 列表。使用 4 位字母数字代码(而不是像 GUID 那样愚蠢的长数字)的原因是人们很容易写下数字(或通过短信发送给朋友)并带上数字并手动输入,所以我们不想要大量的字符。顺便说一句,客户喜欢最后一点。
有没有比ORDER BY newid() 更好的方法,或者有更快的方法从 260 万的表中获取 100k 随机行?
哦,我们使用的是 MS SQL 2005。
谢谢,
乔
【问题讨论】:
-
一个有趣的阅读:sqlteam.com/article/…
标签: sql-server sql-server-2005 random