0
我在使用實體框架6處理大量數據時遇到了麻煩。當我嘗試從數據庫獲取數據時,會發生超時錯誤。我只是包括2個額外的表到我的查詢。我的意思是我加入了3張桌子,其中一張現在是空的。 (ORDERS,ORDER_DETAILS,PEOPLE)實體框架6不能處理大數據
ORDERS表有385K條記錄,而且人有400K條記錄。我也沒有得到所有的記錄。我只爲一頁記錄了25條記錄。 (我正在使用分頁。)
這是我的示例代碼。 15秒後,它會發生超時錯誤,當我從Sql Profiler獲取tsql查詢時,它會工作,但需要37秒。
// skipCount is integer and it changes with page number.
// pageSize is fixed integer number which is 25.
// I also set timeout about 180 seconds
var list = _uow.Repository<ORDERS>()
.Query(x => x.ACTIVE == true)
.Include(x => x.ORDER_DETAILS)
.Include(x => x.PEOPLE)
.OrderBy(sorting)
.Skip(skipCount)
.Take(pageSize)
.ToList();
此外,如果我使用LinqToSql查詢,工作速度非常快。
var list = (from o in _context.ORDERS
join od in _context.ORDER_DETAILS on o.ID equals od.DETAIL_ID
join p in _context.PEOPLE on o.CUSTOMER_ID equals p.ID
select ab)
.OrderBy(sorting)
.Skip(skipCount)
.Take(pageSize)
.ToList();
我該如何解決這個性能問題?或者我的錯誤在哪裏?
在表格中有索引嗎?如果您確實可以檢查其健康狀況(在SQL Management Studio中,右鍵單擊數據庫,選擇Reports-> Standard Reports-> Index Physical Statistics)。也許他們分散,需要重新組織,甚至重建。如果你沒有索引,那麼你就知道下一步該做什麼。 –
謝謝你提醒我,是的,我有索引,我會重新建立他們,但即使我沒有索引,不奇怪沒有得到25條記錄。我能再問一件事,爲什麼linqtosql一個工作得很好,另一個不是。 – Kadir
如果沒有看到您的代碼(LINQ-to-SQL和EF),我無法回答您的問題。同時只需要25條記錄並不意味着你會迅速取消。你需要先找到它們,如果你沒有合適的索引,可能會變成非常慢的操作(你可能已經發現了)。 –