TableSample 选取样本数据

SQL Server 2005引进了一个新的特性TABLESAMPLE从现有的表中随机取出一些样本数据,既可以指定行数,

也可以指定百分比。如:
SELECT *
FROM Performance.dbo.Orders TABLESAMPLE (1000 ROWS);

 

SELECT *
FROM dbo.Orders TABLESAMPLE (0.1 PERCENT);

 

但是值得注意的是,并不代表精确地返回所指定的行数。因为随机选取的单位是数据页,
所以上面指定返回1000行,有可能返回800,900,1200都是有可能的。
如果需要指定准确的行数,可以先随机选取更多的数据,然后再利用TOP关键字,如:
SELECT TOP(1000) *
FROM dbo.Orders TABLESAMPLE (2000 ROWS);

如果需要返回同样的样本数据,使用REPEATABLE关键字,指定某一特定种子,那么
多次执行该条语句返回的样本数据都是一样的。如:
SELECT *
FROM dbo.Orders TABLESAMPLE (1000 ROWS) REPEATABLE(40);

 

TABLESAMPLE的具体算法
如A表有100行,有3个数据页,分别有数据 18,32,50。假设指定选取2行数据,系统首先会
计算出页面选取概率,算法为:2/100 = 1/50。很容易能计算出,该条语句不返回任何行的
概率为 (1 - 1/50) ^ 3  = 94%。返回18行的概率为 (1 - 1/50) * 1/50 * 1/50 =3.92%。同理
可算出其他。可见TABLESAMPLE不适宜选取少量数据。

如果需要选取少量数据,可用下面方法:
SELECT TOP(n) *
FROM dbo.Orders
ORDER BY NEWID();
注意:该种方法要慢很多。

转载于:https://www.cnblogs.com/lizhe88/archive/2011/02/11/1951217.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值