【发布时间】:2014-08-04 07:03:00
【问题描述】:
我正在尝试找出一种方法,从当前有 129,503 条记录的表中随机抽取 X 条记录,并且定期添加更多记录,但需要注意的是我需要对它们进行分页,最好是在数据库级别。使用newid() 将不起作用,因为无法分页该结果集,因为它每次都会更改,也不能使用TABLESAMPLE,因为它不会每次都返回有保证的记录集。我的一个想法是可能生成一个随机值(即newid()),该值存储在此处的每条记录中,因此我可以通过它进行初始排序(而不是动态生成它),然后在这些结果中进行分页始终如一的方式有点超出我的范围。
请考虑一下,因为我需要向访问我们网站的每个用户显示该表中的一组记录,但希望每个用户有不同的视图(使其看起来好像是随机的),但随后需要可靠的分页为每个用户处理这些记录,这样它们就不会得到上一页已经看到的结果。
这是使用 SQL Server 2012,所以有什么想法吗?
【问题讨论】:
-
桌子有多大?对于一张小桌子,这当然是可行的。如果您负担不起对每个查询进行整体排序,那就更难了。
-
在我写这篇文章时有 129,503 行,现在是 129,510。所以它每隔一小时左右就会添加一些东西。
-
这个查询多久执行一次?可以让它运行 100 毫秒吗?如果是,您可以为每次执行对所有行进行排序。
标签: sql sql-server random pagination sql-server-2012