从SQL Server表中高效选择随机样本
从大型SQL Server表中检索随机行样本对于各种目的都很有用。一种常见的方法是在临时表中生成一个“随机数”列,用随机值填充它,然后选择随机数在所需范围内的行。但是,这种方法可能复杂且效率低下。
更直接的方法是利用NEWID()函数。NEWID()根据系统时间和随机性的组合生成唯一的标识符。通过按NEWID()的输出对表进行排序,您可以有效地随机化行顺序。
要选择特定百分比的行,可以使用TOP子句。例如,要从名为[yourtable]的表中选择10%的行,可以使用以下查询:
<code class="language-sql">SELECT TOP 10 PERCENT * FROM [yourtable] ORDER BY NEWID();</code>
虽然此方法通常效率很高,但在处理特别大的表时可能会遇到性能问题。为了优化性能,您可以结合使用TOP和WHERE子句:
<code class="language-sql">SELECT * FROM [yourtable] WHERE [yourPk] IN ( SELECT TOP 10 PERCENT [yourPk] FROM [yourtable] ORDER BY NEWID() );</code>
此查询使用[yourPk]作为主键。内部查询检索所选行的主键,外部查询使用这些主键过滤表。这种方法通过减少扫描的行数来提高性能。
以上是如何从 SQL Server 表中高效地选择随机样本?的详细内容。更多信息请关注PHP中文网其他相关文章!