2009-07-18 79 views
0

我有一個linqtosql查詢篩選和排序的日期列需要20秒運行。當我直接在DB上運行生成的sqlquery時,它會在0秒內返回。LinqToSQL DateTime過濾器?

var myObjs = DB.Table 
.Where(obj => obj.DateCreated>=DateTime.Today) 
.OrderByDescending(obj => obj.DateCreated); 

該表只有100,000條記錄,並且對DateTime列進行了索引。

只是在一長串linqtosql表現不滿情緒。但是這是一個糟糕的問題,我相信我一定在做錯事。

回答

1

我懷疑不同之處在於,雖然運行生成的查詢只需要0秒,這是因爲如果您使用的是企業管理器之類的東西,它實際上並未向您顯示所有結果。只是提取(和反序列化)100,000個結果的所有數據可能需要大量時間,但是您的手動查詢可能只會向您顯示前20個匹配或類似內容。

如果您在.NET中運行相同的SQL並使用DataReader來獲取所有數據,那麼需要多長時間?

如果您運行帶有分析功能的服務器,那麼查詢花費多長時間才能從LINQ執行到SQL?

0

我在查詢中看不到任何錯誤。很高興看到Linq生成的T-SQL。你嘗試過嗎?

1

謝謝你們......

問題是我的,而不是linq的。爲簡潔起見,我縮短了問題中的查詢,但實際上有另一個過濾器已應用於NON索引列。添加索引解決了問題。

儘管如此,正如Jon Skeet所建議的那樣,在Sql Mgmt studio中運行查詢給出了一種錯誤的自信心,因爲查詢被分頁,並且很快返回了前20行,認爲林克是怪罪。所以索引問題只出現在linq中,而不是在sql mgmt studio中。