Profilieren, Profilieren, Profilerstellung. :)
Messen Sie nicht nur Timings, aber achten Sie auf I / O als auch. Eine häufig ausgeführte Abfrage, die I / O-intensive ist, kann aufgrund Caching schnell ausführen, aber wiederum einen negativen Effekt auf die Gesamt db-Server-Leistung können, da weniger Ressourcen für weitere Fragen zur Verfügung stehen wird.
Wie Sie sagen, kann L2S ein bisschen eine Blackbox sein, so müssen Sie versuchen, alle Szenarien zu replizieren und / oder Profil, während die App im Gebrauch von echten Benutzern ist. Verwenden Sie dann das zu 1) zwicken Abfragen 2) hinzufügen Indizes 3) weitere Änderungen vornehmen notwendig, um die Leistung, die Sie brauchen.
Ich habe ein Profilierungswerkzeug speziell für Linq-to-SQL machte es ein wenig ‚weniger Black Box‘ zu machen - es erlaubt Ihnen , Runtime - Profilierung zu tun , während die generierten Abfragen an den Code zu binden (Call - Stack) , die in einer bestimmten Abfrage ergab wird ausgeführt. Sie können es herunterladen und eine kostenlose Testlizenz erhalten http://www.huagati.com/L2SProfiler/
Der Hintergrund Grund für meinen Profiler ist in etwas mehr Detail hier beschrieben:
http://huagati.blogspot.com/2009/06/profiling-linq-to-sql-applications.html
... und einige erweiterte Profilierungsmöglichkeiten sind hier abgedeckt:
http://huagati.blogspot.com/2009/08/walkthrough-of-newest-filters-and.html
Eine andere Sache, die helfen können, wenn Sie eine Menge von Tabellen mit vielen Spalten ist indizieren Info in den Code-Editor zu erhalten. Dies wird durch Hinzufügen xml doc-Kommentare mit dieser Info an die Entitätsklassen und Elementeigenschaften getan; dass Informationen werden dann in dem VS-Code-Editor des Tooltips angezeigt:

... auf diese Weise Sie bereits sehen können , während Abfragen eingeben , wenn ein Index ist die Spalte abdeckt (n) verwendet , in denen Klauseln usw. Um zu vermeiden , dass alle in den Typ, ich habe ein Werkzeug für das auch erstellt. Siehe ‚Update - Dokumentation‘ -Funktion in http://www.huagati.com/dbmltools/