Ich habe eine Tabelle von 200.000 Rekord, wo ich nur die Top 10 mit .Take()
bekomme, aber es dauert etwa 10 Sekunden, um die Daten zu erhalten.Linq zu Entitäten ist sehr langsam mit .Take() -Methode
Meine Frage ist: Ruft die .Take()
Methode alle Daten aus der Datenbank und Filter die Top 10 auf der Clientseite?
Hier ist mein Code:
mylist = (from mytable in db.spdata().OrderByDescending(f => f.Weight)
group feed by mytable.id into g
select g.FirstOrDefault()).Take(10).ToList();
spdata()
ist eine Funktion Import von gespeicherten Prozedur.
Dank
Wenn Sie neugierig sind, was es der Datenbank läuft gegen Sie einen Profiler Haken sollte bis zu Ihrer DB & überprüfen Sie die Protokolle, das ist der beste Weg, um herauszufinden. – Chris
Wenn spdata() die 200.000 dann ja zurückgibt, wird es auf der Clientseite tun. –
Zusätzlich zu Chris 'Methode können Sie auch Linqpad ausprobieren und nach dem Schreiben Ihrer Abfrage in die SQL-Ansicht wechseln, um das generierte SQL zu sehen, oder einen Haltepunkt setzen (mit dieser Methode http://stackoverflow.com/questions/1412863/how -do-i-view-the-sql-generierte-durch-die-Entität-Framework), um zu sehen, was beim Ausführen des Programms generiert wird. –