Ich habe eine einfache Web MVC App mit Datenbank ersten Entity Framework. Ich erhalte Informationen aus einer Tabelle. Es ist sehr langsam.Entity Framework ruft SQL Server oft
Ich habe zwei Probleme:
Wenn ich die Abfrage mit SQL Server Profiler überprüfen, es zeigt die Abfrage als
Select
Abfrage mit einer von-Klausel, die eine andere Auswahlabfrage ist. Ich bin mir nicht sicher, warum es eine andere Auswahl anstelle des Tabellennamens verwendet. Könnte dies die Abfrage verlangsamen?Wenn ich die Zeilen abrufe, wird die Datenbank für jede Zeile aufgerufen, um den Prozess zu verlangsamen. Es verwendet den Schlüssel aus der Tabelle und fragt die Datenbank für jede Zeile erneut ab. Warum ruft es die Datenbank für jede Zeile ab? Hat die erste Abfrage nicht alle Zeilen zurückgegeben?
Unten ist mein Code und SQL Server Profiler Ergebnisse.
Code:
List<FanDetail> fans = db.FanDetails.ToList();
foreach (var item in fans)
{
FanSummaryViewModel add = new FanSummaryViewModel()
{
Part_No = item.Part_No,
}
}
SQL Server Profiler Ergebnisse für die Abfrage:
SELECT
[Extent1].[Part_No] AS [Part_No]
FROM
(SELECT
[FanDetails].[Part_No] AS [Part_No]
FROM
[dbo].[FanDetails] AS [FanDetails]) AS [Extent1]
SQL Profiler For Each auf die Ergebnisse:
exec sp_executesql N'SELECT TOP (1)
[Extent1].[Part_No] AS [Part_No]
FROM (SELECT
[FanDetails].[Part_No] AS [Part_No]
FROM [dbo].[FanDetails] AS [FanDetails]) AS [Extent1]
WHERE [Extent1].[Part_No] = = @p__linq__0',N'@p__linq__0 varchar(8000)',@p__linq__0='00405635'
mich, ob ich wissen lassen müssen mehr Details zur Verfügung stellen.
Ich bin neu bei EF und habe seit einiger Zeit an diesem Leistungsproblem gearbeitet.
Das war genau das, was ich brauchte. Danke für die Rückmeldung und Hilfe. Es hat meine Seitenladezeit von 15-20 Sekunden auf unter 3 Sekunden reduziert. Mit Ihrer Anweisung war es sehr einfach zu implementieren. – user2011126