从SQL Server表中生成随机样本对于各种目的来说都是一项有用的操作。一个常用的解决方案是从表中随机选择固定数量的行。
复杂方法的不足
文中提到的问题指出了使用临时表和RAND()循环的复杂方法。这些方法效率低下且不够灵活。
NEWID()方法的局限性
文中还提到了一种使用NEWID()函数的替代方法。然而,这种方法可能不适合选择特定百分比行的要求。
T-SQL解决方案
为了解决这个问题,文中提供了一个SQL Server脚本:
<code class="language-sql">select top 10 percent * from [yourtable] order by newid()</code>
此语句利用NEWID()函数和TOP子句选择前10%的行,返回表的随机样本。
针对大型表的优化方法
对于大型表,可以通过使用以下修改后的脚本来提高性能:
<code class="language-sql">select * from [yourtable] where [yourPk] in (select top 10 percent [yourPk] from [yourtable] order by newid())</code>
此方法分两步进行:首先,选择随机主键值;然后,使用这些主键值检索对应的行。它平衡了键扫描和连接成本,使其对大型表效率更高。
以上是如何从 SQL Server 表中高效地随机选择行样本?的详细内容。更多信息请关注PHP中文网其他相关文章!