Ich entwickle eine C# -Anwendung, die einen SQL Server (2008 R2) über LINQ verwenden.LINQ to SQL Server: andere Geschwindigkeit für die gleiche Abfrage auf andere Spalte
ich eine Abfrage wie diese:
datacontex.Table.Where(e => e.id == id).OrderByDescending(e => e.<item>).FirstOrDefault();
Das Problem ist, dass die Abfrage unterschiedliche Geschwindigkeit auf dem unterschiedliche „item“ basierte führt verwende ich.
Ich meine dies: Abfrage läuft in 1ms, wenn das Element "item1", läuft aber in 50-200ms wenn das Element "item2"
Alle "id", "item1" und "item2" sind nicht geclusterten Index. Der einzige Unterschied ist, dass item1 ist ein Datetime, Item2 ist ein int.
Die einzige Möglichkeit, beide Abfragen schnell auszuführen, besteht darin, den Index "id" so zu ändern, dass er auch "item2" enthält.
Warum das passiert?
BEARBEITEN: einige andere Details über die Tabelle. Die Tabelle enthält bis zu 100 verschiedene, nicht eindeutige "id". Für jede ID gibt es bis zu 5000 Zeilen. Item2 ist nicht eindeutig, aber die Paare (id, item2) sind eindeutig. Beispiel:
ID ITEM2 ITEM1
1 1 <auto generated timestamp>
1 2
1 3
[...] [...]
1 5000
2 3000
2 3001
2 3002
[...] [...]
2 8000
100 1001
100 1002
100 1003
[...] [...]
100 6000
Könnte die Varianz in den Werten sein. Ist dein 'item1' tendenziell einer von wenigen Werten, während' item2' vielfältiger ist? – juharr
item1 ist eine numerische ID und kann bis zu 100 Mal in einer Tabelle dupliziert werden (jede Tabelle enthält bis zu 500.000 Elemente); item2 ist ein automatisch erstellter Zeitstempel. – ElmoDev001
Dies ist aufgrund von Interpretationen schwierig zu beantworten, da wir die tatsächlichen Daten nicht sehen können. Meine Annahme ist, dass das von Ihnen übergebene item2 nicht vom genauen Typ ist (smalldatetime, date, datetime, datetime2 oder sogar als String übergeben) und implizit konvertiert wird, was zum Verlust des Index führt. –