Ich führe die folgende Abfrage auf meiner Datenbank, die eine SQL-Abfrage generiert, ich weiß, gibt 0 Ergebnisse und wenn in Sql Management Studio ausgeführt dauert weniger als eine Sekunde, um zurückzukehren.Warum dauert es so lange, bis eine leere Ergebnismenge in linqtosql angezeigt wird?
var query = (from item in db.Table
where item.Field == FieldValue // Field is not the primary key but is indexed
from other in item.Associated_Table
select other.Table);
List<Table> result = query.ToList();
Die Associated_Table ist eine Join-Tabelle, die Elemente in Tabelle mit anderen Elementen in Tabelle verknüpft. Die resultierende Abfrage sieht wie folgt aus:
declare @p0 as int
SELECT
[t2].[ItemCategoryID],
[t2].[InventoryItemID],
[t2].[SiteID],
[t2].[ItemDescription],
[t2].[AverageMonthlyUsage],
[t2].[ReorderLevel],
[t2].[ReorderQuantity],
[t2].[OtherItemDetails],
[t2].[Price] AS [IntPrice],
[t2].[Ordinal],
[t2].[IsBase] AS [IntIsBase],
[t2].[Units],
[t2].[ProfitCenterID] AS [IntProfitCenterID],
[t2].[AccountID],
[t2].[PLU] AS [IntPLU],
[t2].[BarCode],
[t2].[DisplayName],
[t2].[ExtraServiceAmount] AS [IntExtraServiceAmount],
[t2].[IsSearchable],
[t2].[Terminated],
[t2].[PdxServiceKey],
[t2].[IsOpenPrice],
[t2].[ItemPromotionCategoryID]
FROM
[dbo].[Inventory.Item] AS [t0]
CROSS JOIN
[dbo].[Inventory.ItemExtraAssignment] AS [t1]
INNER JOIN
[dbo].[Inventory.Item] AS [t2]
ON [t2].[InventoryItemID] = [t1].[ExtraInventoryItemID]
WHERE
([t0].[PLU] = @p0) AND
([t1].[InventoryItemID] = [t0].[InventoryItemID])
In Management Studio diese Abfrage läuft unter einer Sekunde und liefert 0 Ergebnisse. Warum dauert es 2 Sekunden, um die 2 Zeilen von C# auszuführen, die dieselbe Abfrage ausführen? Mir ist klar, dass LinqToSql einen gewissen Aufwand für die Analyse der Objekte benötigt, aber da keine Objekte zurückgegeben werden, sollte es keine Arbeit zu erledigen haben.
Gibt es eine Optimierung, die ich vermisse; oder vielleicht Einige Einstellungen im dbml oder SQL Server selbst, die geändert werden müssen?
Ich hatte das gerade selbst gefunden und kam hierher zurück, um meine eigene Antwort einzureichen. Dieser Artikel war eine große Hilfe zum Erlernen kompilierter Abfragen: http://msmvps.com/blogs/omar/archive/2008/10/27/solving-common-problems-with-compiled-queries-in-linq-to-sql -für-hohe-Nachfrage-asp-net-websites.aspx – Mykroft