Ich verwende IQueryable<T>
Schnittstellen während meiner Anwendung und verschieben die Ausführung von SQL auf der DB bis Methoden wie .ToList()
zählen VS in LINQ auswählen - was ist schneller?
Ich muss den Grafen von bestimmten Listen manchmal finden -without- um die Daten in der Liste zu bedienen ist gezählt. Ich weiß aus meiner SQL-Erfahrung, dass ein SQL COUNT() viel weniger Arbeit für die DB als die äquivalente SELECT-Anweisung ist, die alle Zeilen zurückgibt.
Also meine Frage ist: Wird es weniger Arbeit an der DB, die Zählung von den IQueryable<T>
‚s Count()
Methode zurückzukehren, als die IQueryable<T>
auf eine Liste zu machen und das Aufrufen der Count()
-Methode der Liste?
Ich vermute, es wird gegeben, dass die ToList()
wird die SELECT sql und dann in einer separaten Abfrage die Zeilen zählen. Ich hoffe, dass die Count()
auf der IQueryable<T>
einfach die SQL für eine SQL COUNT() Abfrage stattdessen ausgibt. Aber ich bin mir nicht sicher. Wissen Sie?
danke Jon. Ich kann überprüfen, dass die Count() - Methode von IQQueryable die richtige SQL COUNT() und nicht die Count-Eigenschaft der Liste ausführt, die das SELECT ausgelöst haben muss. hier ist auch ein kool TextWriter für diejenigen, die das Logging beobachten wollen - http: //www.u2u.info/Blogs/Kris/Lists/Posts/Post.aspx? ID = 11 –
Sql Server COUNT wird immer noch langsam sein, da es einen Tabellenscan verursacht! – Slaggg
@Slaggg, wenn Sie einen Index haben, wird nur ein Index-Scan auf dem kleinsten Index durchgeführt, den Sie haben. Wenn Sie keine Indizes haben, wird die Netzwerklast auf dem Datenbankserver immer noch reduziert (im Vergleich zur Rückgabe aller Zeilen). –