我們使用實體框架來查詢SQL服務器數據庫。 LINQ表達式是IQueryable。該查詢大約需要10秒鐘才能執行。如果這是在一個存儲過程中,我會玩弄查詢以提高效率。然而,如果我使用IQueryable,實體框架本身是否決定如何構建一個有效的查詢,還是必須使用linq表達式並通過試驗和錯誤來提高性能?實體框架性能調優
實體框架性能調優
回答
做實體框架本身就如何建立一個高效的查詢
EF總會自動確定如何構建查詢,和SQL -server也自動地優化查詢決定。
我必須玩弄LINQ表達式,並通過試驗和錯誤來提高性能嗎?
你可以嘗試與查詢,但發揮一般微小的變化不會影響性能(在表達式中的順序計算)
您可以隨時使用SQL Profiler觀看EF做什麼,看看如何高效查詢是。如果需要很長時間,則可以重新運行SSMS中的查詢並打開Include Actual Execution Plan並確定查詢速度慢。
如果您使用EF 6,則可以非常輕鬆地啓用日誌記錄。然後,您可以檢查每個呼叫正在做什麼。我會從那裏開始。 MSDN EF6 Logging
你能夠分享更多關於你的查詢和結果大小嗎?
我已經能夠在SQL分析器中看到查詢。我想問的是,有沒有一種方法可以調整linq表達以獲得最佳性能。 – developer747
@ developer747,有時您可以將複雜查詢拆分爲較小的查詢,這可以改變總體執行時間。但是您需要分享查詢以便更好地幫助您。 – Romias
作爲數據庫開發人員比C#開發人員,多與接觸非常有限的實體框架的細節,我可以說:
我的理解是,實體框架決定如何建立一個查詢,可能沒有太多的能力瞭解效率。有可能是一些事情你可以在你的Linq查詢或Lambda表達式中做得更好或更差,但大多數情況下你可能無法真正調整查詢。這是使用ORM的一個主要缺點,至少從數據庫管理員的角度來看,他們在深夜服務器爬行停止時無法執行任何操作來修復查詢,而且它不像您總是可以添加索引;-)。
我也可以說你在Entity Framework中有選項可以爲每個DML操作指定一個存儲過程,這樣如果你真的需要用這個特定的查詢來做更好的事情,那麼就創建一個存儲過程這一操作並將EF對象指向SELECT,但允許EF爲INSERT/UPDATE DELETE構建查詢。
這有幫助嗎?
- 1. 實體框架,性能調優
- 2. SQL性能優化(實體框架)
- 3. 性能的實體框架
- 4. 實體框架性能
- 5. 優化實體框架
- 6. 實體框架中的一次性實體代碼優先
- 7. 性能分析ADO.NET和實體框架
- 8. 實體框架協會性能
- 9. 實體框架4.1性能問題
- 10. 實體框架.INCLUDE性能問題
- 11. 實體框架6.0的性能問題
- 12. 實體框架性能VS傳統ADO.Net
- 13. ADO.NET實體框架模型性能
- 14. 實體框架vs NHibernate - 性能
- 15. 實體框架 - 在導航性能
- 16. Linq To Sql vs實體框架性能
- 17. 實體框架總和()的性能
- 18. 實體框架查詢和性能
- 19. 性能問題:實體框架
- 20. 實體框架刪除性能
- 21. 實體框架協會查殺性能
- 22. 實體框架 - 填充其餘性能
- 23. 實體框架性能問題
- 24. 實體框架6和異步()性能
- 25. ASP.NET MVC,實體框架和性能
- 26. 實體框架包括性能
- 27. 實體框架查詢性能
- 28. 實體框架插入性能
- 29. 實體框架性能緩慢
- 30. 實體框架的SQL查詢性能
這將是最好的包括實際的查詢,這樣的抽象問題通常不會幫助未來的讀者。 –