我有一个大于1000万行的巨大表。我需要从中有效地获取5000个随机样本。我有一些限制因素,使我想要的总行数减少到9密耳。
我尝试通过NEWID()使用order,但是该查询将花费很长时间,因为它必须对所有行进行表扫描。
有没有更快的方法可以做到这一点?
如果您可以使用伪随机抽样并且您使用的是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()的方法来执行此操作。
问题内容: 从大型mysql表中选择随机行的快速方法是什么? 我正在使用php,但是我对任何解决方案都感兴趣,即使它是另一种语言也是如此。 问题答案: 获取所有ID,从中随机选择一个ID,然后检索整行。 如果您知道ID是连续无孔的,则只需获取最大值并计算一个随机ID。 如果到处都有孔,但大多数是顺序值,并且您不关心随机偏斜,则获取最大值,计算一个id,然后选择ID等于或大于您所计算的ID的第一行。
问题内容: 如何最好地编写一个查询,从总共60万行中随机选择10行? 问题答案: 一个出色的职位,可以处理多种情况,从简单到有缺口,再到有缺口的不均匀。 http://jan.kneschke.de/projects/mysql/order-by- rand/ 对于大多数一般情况,这是您的操作方法: 这假定id的分布是相等的,并且id列表中可能存在间隙。请参阅文章以获取更多高级示例
问题内容: 如何最好地编写一个查询,从总共60万行中随机选择10行? 问题答案: 一个出色的职位,处理从简单到有缺口,再到有缺口不均匀的几种情况。 http://jan.kneschke.de/projects/mysql/order-by- rand/ 对于大多数一般情况,这是您的操作方法: 这假定id的分布是相等的,并且id列表中可能存在间隙。请参阅文章以获取更多高级示例
问题内容: 允许从向量中进行加权选择,即 选择概率为0.2的1,概率为0.5的2和概率为0.3的3。 如果我们想对每个行都是概率向量的2D数组(矩阵)以向量化的方式快速进行操作,该怎么办?也就是说,我们想要一个来自随机矩阵的选择向量吗?这是超级慢的方式: : 这篇文章表明,并且可能是一种潜在的方法,而且很快。但是虽然可以沿numpy数组的一个轴执行此操作,但是该函数一次只能在单个数组上运行。同样,
问题内容: 我可以使用列出所有组合, 但这通常会很大。 给定和,我如何在不首先构建大量列表的情况下随机地均匀选择组合? 问题答案: 来自http://docs.python.org/2/library/itertools.html#recipes
其中是我想要的,而是绘制示例的限制。在中有类似的内容吗?