我想用一个快速方法从一个大表(超过100万行)中获得5个随机数的行。从SQL Server表中获取随机行数
到目前为止,我所与这些SQL查询测试:
方法1
Select top 5 customer_id, customer_name
from Customer TABLESAMPLE(1000 rows)
order by newid()
这种方法估计I/O成本为0.0127546
,所以这是非常快的(索引扫描非聚集)
方法2
select top 5 customer_id, customer_name
from Customer
order by newid()
这种方法的排序估计I/O成本117.21189
和索引扫描非聚集估计I/O成本2.8735
,所以这是影响性能
方法3
select top 5 customer_id, customer_name
from Customer
order by rand(checksum(*))
这种方法的排序估计I/O成本为117.212
,而且索引扫描非集群估计I/O成本为213.149
,此查询比全部要慢,因为估计的子树成本为213.228
,所以速度非常慢。
UPDATE:
方法4
select top 5 customer_id, customer_name, product_id
from Customer
Join Product on product_id = product_id
where (customer_active = 'TRUE')
order by checksum(newid())
这种做法更好,速度非常快。所有的基准测试都很好。
问题
我如何转换方法4到LINQ到SQL?由于
您是否在询问有关提高随机查询性能或将查询转换为LINQ的问题? –
你想要结果如何随机? 'TABLESAMPLE'实际上并不是随机的(除非你的行很大,只有一行适合页面)。 –
@JuanCarlosOropeza是的首先,我正在寻找转换方法1到LINQ,如果不可能的话,那么我正在寻找更好的方法。 –