2008-08-07 24 views
17

Ile nakładów na wydajność bazy danych ma zastosowanie C# i LINQ w porównaniu do niestandardowych zoptymalizowanych zapytań załadowanych głównie niskopoziomowym C, zarówno z backendem SQL Server 2008?Ile nakładów wydajności bazy danych przy użyciu LINQ?

Mam tu na myśli przypadek, w którym masz dość intensywny program i odświeżycie lub zaktualizuje dane przynajmniej raz na ekranie i będzie mieć od 50 do 100 równoczesnych użytkowników.

Odpowiedz

1

Z mojego doświadczenia wynika, że ​​obciążenie jest minimalne, pod warunkiem, że osoba pisząca zapytania wie, co robi i podejmuje typowe środki ostrożności, aby upewnić się, że generowane zapytania są optymalne, czy potrzebne są odpowiednie indeksy itp. Innymi słowy, wpływ bazy danych powinien być taki sam; po stronie aplikacji występuje minimalny, ale zazwyczaj nieistotny narzut.

To powiedziło ... jest jeden wyjątek od tego; jeśli pojedyncza kwerenda generuje wiele agregacji, dostawca L2S tłumaczy ją na duże zapytanie z jedną sub-kwerendą na agregat. W przypadku dużej tabeli może to mieć znaczący wpływ we/wy, ponieważ koszt we/wy bazy danych dla zapytania wzrasta o wielkość dla każdego nowego agregatu w zapytaniu.

Rozwiązaniem tego problemu jest oczywiście przeniesienie agregatów do przechowywanego procesu lub widoku. Matt Warren ma przykładowy kod dla alternatywnego dostawcy zapytań, który tłumaczy tego rodzaju zapytania w bardziej efektywny sposób.

Zasoby:

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

Dzięki Stu. Podsumowując, wydaje się, że LINQ do SQL prawdopodobnie nie ma znacznego wpływu na wydajność bazy danych w nowszych wersjach, jeśli możesz użyć kompilowanego wyboru, a wolniejsze funkcje aktualizacji będą prawdopodobnie szybsze, chyba że masz NAPRAWDĘ ostry ekspert wykonujący większość kodowania.