使用 LINQ(ala TABLESAMPLE)从大型结果集中有效地选择随机行

jwd*_*jwd 5 linq sql-server random linq-to-entities sql-server-2008

我想从一个非常大的表(数百万行)上的复杂查询的结果中选择一些随机行。

我正在使用 SQL Server 2008,有效地执行此操作的正确方法似乎是TABLESAMPLE子句。

注 1:我对流行的“order by NEWID()”解决方案不感兴趣 - 它对于大型表来说效率低下。

注 2:由于我的查询很复杂,如果可能的话,我不想首先计算它的 COUNT。

注3:由于结果集很大,我不想自己遍历它,就像这里建议的那样。

最重要的是我正在使用 LINQ。具体来说,就是 LINQ-To-Entities。

是否有一种 LINQ 友好的方式来使用 TABLESAMPLE?

即使没有直接支持,是否有某种方法可以在 LINQ 中编写大部分查询,然后执行少量手动 SQL 来执行 TABLESAMPLE?

jwd*_*jwd 0

看来我想要完成的事情一开始就不可能实现。

TABLESAMPLE 不能在派生表上使用,因此使用复杂查询生成大型结果集然后使用 TABLESAMPLE 进行随机采样甚至是不可行的。

TABLESAMPLE 只能在连接等之前在进入查询的基表上使用。(参见文档

此 MSDN 链接描述了一种有效获取随机百分比结果的方法,因此实现我想要的效果的最佳方法可能是在视图中使用它,并根据该视图构建我的 LINQ。

感谢大家的意见。