我想从一个非常大的表(数百万行)上的复杂查询的结果中选择一些随机行。
我正在使用 SQL Server 2008,有效地执行此操作的正确方法似乎是表格示例 http://technet.microsoft.com/en-us/library/ms189108.aspx clause.
注 1:我对流行的“order by NEWID()”解决方案不感兴趣 - 它对于大型表来说效率低下。
注 2:由于我的查询很复杂,如果可能的话,我不想首先计算它的 COUNT。
注3:由于结果集很大,我不想自己遍历它,如建议的那样here https://stackoverflow.com/questions/648196/random-row-from-linq-to-sql/648240#648240.
最重要的是我正在使用 LINQ。具体来说,就是 LINQ-To-Entities。
是否有一种 LINQ 友好的方式来使用 TABLESAMPLE?
即使没有直接支持,是否有某种方法可以在 LINQ 中编写大部分查询,然后执行少量手动 SQL 来执行 TABLESAMPLE?
不是您问题的直接答案,但您可以使用此技术来选择各个行的随机百分比样本。以下查询使用 NEWID 函数返回 Sales.SalesOrderDetail 表中大约百分之一的行:
SELECT * FROM Sales.SalesOrderDetail
WHERE 0.01 >= CAST(CHECKSUM(NEWID(), SalesOrderID) & 0x7fffffff AS float) / CAST (0x7fffffff AS int)
可能感兴趣:T-SQL:生成随机数、随机采样和随机“善良” http://mitch-wheat.blogspot.com/2011/08/t-sql-generating-random-numbers-random.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)