从巨大的桌子中选择小样本的快捷方式

时间:2012-04-29 20:53:15

标签: sql sql-server select random database-performance

我拥有的表格大约有1亿多个条目,默认情况下按“A”排序。可能有许多项目具有相同的列A,A从0增加到......大数字。我尝试过TABLESAMPLE,但它并没有从每个A号中选择一个好的数字,它会跳过其中的一些,或者说我没有使用它。所以我想从每个A号中选择相同数量的值。我希望所选行的总数是一个数字,比方说1000万,或者让它称之为B.

3 个答案:

答案 0 :(得分:2)

虽然我不清楚你需要实现什么,但是当我需要在Parent和/或公共属性值之间分配得很好的大样本子集时,我这样做了:

SELECT  *
FROM    YourTable
WHERE   (YourID % 10) = 3

这样做的另一个好处是,只需将“3”更改为另一个数字,即可获得另一个完全不同的样本。另外,您可以通过调整“10”来更改子样本大小。

答案 1 :(得分:1)

您可以使用NEWID()

SELECT TOP 100
  *
FROM
  YourTable
ORDER BY NEWID()

答案 2 :(得分:0)

@RBarryYoung解决方案是正确的,通用的,它适用于任何常量统计分布,如id序列(或任何自动增量列)。但有时,您的分发不是常量,或者您可能遇到性能问题(SQL Server必须扫描所有索引条目以计算WHERE子句)。

如果其中任何一个影响您的问题,请考虑可能符合您需求的内置T-SQL运算符TOP

SELECT TOP (30) PERCENT *
FROM YourTable;