Ich benutze MySQL Connector / Net 6.5.4 mit LINQ zu Entitäten, und ich bekomme häufig eine schreckliche Abfrageleistung, weil das Entitätsframework Abfragen generiert, die abgeleitete Tabellen verwenden.
Hier ist ein vereinfachtes Beispiel für das, was ich mehrmals gesehen habe. In C # schreibe ich eine Abfrage wie folgt:
%Vor%Anstatt eine einfache Abfrage wie folgt zu generieren:
%Vor%Das Entitätsframework generiert eine Abfrage mit einer abgeleiteten Tabelle wie folgt:
%Vor%Wenn ich beide Abfragen erkläre, bekomme ich das für die erste Abfrage:
%Vor%... und etwas Schreckliches für die Entity-Framework-Abfrage
%Vor%Beachten Sie die erste Zeile, in der MySQL erklärt, dass 9000+ Datensätze gescannt werden. Aufgrund der abgeleiteten Tabelle erstellt MySQL eine temporäre Tabelle und lädt jede Zeile. (Oder ich folge aus Artikeln wie diesem: Abgeleitete Tabellen und Views-Leistung )
Wie kann ich verhindern, dass das Entity Framework eine abgeleitete Tabelle verwendet, oder wie kann ich MySQL dazu bringen, die offensichtliche Optimierung für solche Abfragen durchzuführen?
Zum Abschluss ist hier die Ansicht, die die Quelle für diese linq-Abfrage ist:
%Vor%Ich denke, dass Ihre Abfrage fehlt, wählen Sie aus. Sie haben die gewünschten Datensätze nicht identifiziert. Ihre Frage:
%Vor%// keine Auswahl
Was wählen Sie aus der Tabelle? probiere das
ausBeispiel:
%Vor%Tags und Links c# entity-framework mysql linq-to-entities database-performance