回答

收藏

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

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

我有一个包含约50,000行的SQL
( i3 D7 D7 }* v( mServer表。我想随机选择大约5,000行。我想到了一种复杂的方法,用“随机数”列创建一个临时表,将我的表复制到该表中,遍历该临时表并用来更新每一行RAND(),然后从该表中选择随机数列2 }$ X( a+ a$ U7 s0 q
本文建议使用该NEWID()功能。这看起来很有希望,但是我看不到如何可靠地选择一定百分比的行。
+ r% S- ~+ b4 Z$ ?有人做过吗?有任何想法吗?' U" x( @) f+ H3 z- H; b8 d+ h
               
7 Z+ K& `4 s& |/ m0 l解决方案:! w% @; G* I. y% n
                * t" r- l2 V4 b4 E

) w# @1 H# w4 F2 h- p# q  L
( F$ A5 Y; [2 E5 ^, g- z% p                select top 10 percent * from [yourtable] order by newid()" B1 o( v: F8 U6 W  h, g
为了回应有关大型表的“纯垃圾”注释:您可以这样做来提高性能。- W3 e& R' U" P' Y/ r2 W7 S
select  * from [yourtable] where [yourPk] in
: W+ U7 I( s! I+ M(select top 10 percent [yourPk] from [yourtable] order by newid())8 t* ?4 s$ j2 c
此操作的成本将是对值进行加键扫描,再加上联接成本,在较大的表上选择较小的百分比应该是合理的。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则