回答

收藏

从SQL Server表中选择n个随机行

技术问答 技术问答 111 人阅读 | 0 人回复 | 2023-09-13

我有一个包含约50,000行的SQL
8 B( I2 m6 H; d  ^1 oServer表。我想随机选择大约5,000行。我想到了一种复杂的方法,用“随机数”列创建一个临时表,将我的表复制到该表中,遍历该临时表并用来更新每一行RAND(),然后从该表中选择随机数列
4 w. Y! q4 W" g2 \1 Y7 x4 W本文建议使用该NEWID()功能。这看起来很有希望,但是我看不到如何可靠地选择一定百分比的行。
# |) W& C1 P$ L7 q6 E$ Q有人做过吗?有任何想法吗?
- `* G- c8 U0 S3 {* L) S7 t2 q               
- j$ e4 L! t3 w+ ^1 n解决方案:
! d2 e1 }5 {% k4 b/ k0 Q) A                ( U  `$ J' L; s1 g6 T, @
6 k- C  k+ c. ^, m+ L

1 e+ m: v. F: Y9 q: ^9 b                select top 10 percent * from [yourtable] order by newid()& i  N6 n' s* y- ]3 s
为了回应有关大型表的“纯垃圾”注释:您可以这样做来提高性能。) M# x; y1 X& }9 l
select  * from [yourtable] where [yourPk] in
0 s! C, N! h1 u$ Y$ l$ O9 z) t+ C( n(select top 10 percent [yourPk] from [yourtable] order by newid())
; K# r+ `, ~+ R1 r4 @$ E& t/ H" h$ M此操作的成本将是对值进行加键扫描,再加上联接成本,在较大的表上选择较小的百分比应该是合理的。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则