簡體   English   中英

應該編譯什么類型的Linq to SQL查詢?

[英]What type of Linq to SQL queries should be compiled?

我正在項目中使用Linq to SQL,並閱讀有關框架效率低下的文章。 我已經讀過,提高性能的一種方法是創建編譯查詢。 所有查詢都會更好地編譯嗎? 或者在某些情況下它可能沒有多大區別? 我認為這對於獲得大量流量的大規模應用程序至關重要。

謝謝。

我以前碰到過這個。 編譯查詢可能是一件好事,並且確實可以顯着提高性能。 但這並不總是最好的解決方案。

我正在研究一些需要30-40分鍾才能運行的報告。 我發現我們正在調用某些查詢數百次。 編譯查詢確實提供了改進,但還不夠。

我最終做的是運行較少的返回更多數據的查詢。 這減少了打開和關閉連接。 結果是在不到一分鍾的時間內發布的報告。

因此,如果您不得不多次運行查詢,那么編譯它是一個很好的選擇。 如果它運行數百或數千次,您可能只需要一種新方法。

關於這兩件事的幾篇文章:

用於報告的SQL查詢優化:不同的方法

http://www.foliotek.com/devblog/sql-query-optimization-for-reporting-a-different-approach/

Linq中預編譯查詢的意外好處:

http://www.foliotek.com/devblog/unexpected-benefits-of-precompilation-of-linq/

還需要考慮的另一件事是數據庫中的索引。 你的查詢很慢,但你不知道為什么它很慢。 如果它正在搜索未編入索引的列,那么這也可能是您的問題。

小心過早優化!

在您分析應用程序並確定您花費大量時間創建查詢之前,開發人員的時間和簡單性,可維護性和靈活性的降低是不值得的。

即使您在查詢構建上花費了大量時間,也要注意預編譯查詢會將運行時間減少一個相對較小的常量,而不是數量級。 因此,首先考慮程序更改(如納尼亞提及)或緩存技術,以減少實際上必須首先運行這些查詢的次數。

完成此操作后,仍然發現撰寫查詢時存在瓶頸,很可能90%的時間花在了正在運行的查詢的大約5%(或更少)上。 優化那些查詢。

更新

Entity Framework的現代實現現在內置了查詢緩存,因此只需使用現代版本的.NET,您就可以獲得預編譯查詢為您提供的90%的好處。 更不用擔心改變代碼結構以適應理論性能提升的原因。

如果您一次又一次地運行類似的查詢,則可以通過編譯來提高性能。

但有一些警告: http//omaralzabir.com/solving_common_problems_with_compiled_queries_in_linq_to_sql_for_high_demand_asp_net_websites/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM