2010-10-26 60 views
0

我正在從數據庫(〜130 000 000行)計算數據。帶n行並跳過m行的問題實體框架

由於大量的行我選擇1毫升計算他們保存結果,然後選擇另一個1毫升等。

,因爲我想有這個對象在內存中我使用選擇.. orderby .. skip m... take n...ToList()

當我跳過1 mln然後2 mln然後3 mln ...然後讓我們說6 mln它相當好,但然後突然查詢需要很長時間。

你有同樣的問題嗎?

有什麼辦法可以讓它工作得更快嗎?

感謝您的幫助, 再見

回答

0

如果你看一下生成的SQL,你會看到這個問題快。 SQL Server沒有本地SKIP,因此實體框架即將在這方面發揮作用。 I've explained some of the details in this post

爲了有效地做到這一點,您需要用不同的方法對數據進行分區,其中一種方法可以由服務器使用索引來實現。不知道更多關於這個問題的信息,我不能說最好的方法是什麼,但是要尋找一種可以在SQL查詢中索引數據的方法。

+0

我想創建網絡,頂點是用戶和邊緣連接beetwen(如果有人打電話給另一個用戶,然後邊緣值增加)。在一行中,我用UserAId UserBid和其他一些細節。我需要進行每行填充數據,這是效率問題 – gruber 2010-10-26 20:43:02

0

你可以使用行數,但我不知道這居屋適用於實體框架。

這樣,你去哪兒行數()> 2 000 000然後採取(1 000 000)

或者,如果你有一個ID列,依次遍歷添加條件,其中對ID>最後處理ID。

這應該是比跳過

+0

'Skip'已經做了rowcount。這正是問題所在。 Rowcount在這張桌子上很慢。 – 2010-10-26 15:03:51