我想用一個快速方法從一個大表(超過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,如果不可能的話,那麼我正在尋找更好的方法。 –