从SQLServer表中选择n个随机行

从SQLServer表中选择n个随机行

我有一个SQL Server表,其中包含大约50,000行。我想随机选择其中的5,000行。我想到了一种复杂的方法,创建一个带有“随机数”列的临时表,将我的表复制到其中,循环遍历临时表,然后用RAND(),然后从该表中选择随机数列<0.1的表。如果可能的话,我正在寻找一种更简单的方法。

这篇文章建议使用NEWID()功能。这看起来很有希望,但我不知道如何可靠地选择一定百分比的行。

以前有人这么做过吗?有什么想法吗?


繁星点点滴滴
浏览 1177回答 3
3回答

慕标5832272

取决于你的需要TABLESAMPLE会给你带来几乎一样的随机和更好的表现。这可在MS SQL Server 2005及更高版本上使用。TABLESAMPLE将从随机页而不是随机行返回数据,因此DEOS甚至不会检索它不会返回的数据。在一个很大的桌子上我测试了select&nbsp;top&nbsp;1&nbsp;percent&nbsp;*&nbsp;from&nbsp;[tablename]&nbsp;order&nbsp;by&nbsp;newid()花了20多分钟。select&nbsp;*&nbsp;from&nbsp;[tablename]&nbsp;tablesample(1&nbsp;percent)花了两分钟。中的较小样本的性能也将得到改善。TABLESAMPLE而它不会newid().请记住,这并不像newid()方法,但会给你一个像样的抽样。见MSDN页面.
打开App,查看更多内容
随时随地看视频慕课网APP