2008-08-07 21 views
17

與使用大多數低級C加載的定製優化查詢(包括SQL Server 2008後端)相比,使用C#和LINQ涉及多少數據庫性能開銷?使用LINQ時數據庫性能開銷多少?

我在這裏特別想到的情況是,你有一個相當數據密集型的程序,並將在每個屏幕至少進行一次數據刷新或更新,並且將有50-100個併發用戶。

回答

1

根據我的經驗,如果編寫查詢的人知道他/她正在做什麼,並採取通常的預防措施以確保生成的查詢是最優的,必要的索引是否存在等,則開銷很小。換句話說,數據庫的影響應該是一樣的;應用程序方面的開銷很小,但通常可以忽略不計。

這就是說...有一個例外,如果單個查詢生成多個聚合,則L2S提供商將其轉換爲一個大查詢,每個聚合有一個子查詢。對於大型表格,這可能會產生顯着的I/O影響,因爲對於查詢中的每個新聚合,查詢的數據庫I/O成本隨着幅度的增大而增大。

解決方法是將聚合移動到存儲過程或視圖。馬特沃倫有一些替代查詢提供程序的示例代碼,可以更有效地翻譯這類查詢。

資源:

https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=334211

http://blogs.msdn.com/mattwar/archive/2008/07/08/linq-building-an-iqueryable-provider-part-x.aspx

2

感謝Stu。底線似乎是,如果您能夠使用編譯選擇,那麼LINQ to SQL可能不會對新版本造成顯着的數據庫性能開銷,並且更新的較慢功能可能會更快,除非您有一個真正的尖銳專家在做大部分編碼。