LINQ to SQL Server: vitesse différente pour la même requête sur une colonne différente

Je développe une application C # qui utilise un SQL Server (2008 R2) via LINQ.

J'ai une requête comme celle-ci:

datacontex.Table.Where(e => e.id == id).OrderByDescending(e => e.<item>).FirstOrDefault(); 

Le problème est que la requête effectue une vitesse différente en fonction de l'élément différent que j'utilise.

Je veux dire ceci: la requête s'exécute en 1ms si l'élément est "item1", mais s'exécute en 50-200ms si l'item est "item2"

Tous les "id", "item1" et "item2" sont des index non groupés. La seule différence est que item1 est un datetime, item2 est un int.

La seule façon d'avoir les deux requêtes à exécuter rapidement est de modifier l'index "id" pour inclure également "item2".

Pourquoi cela arrive?

EDIT : quelques autres détails sur la table. La table contient jusqu'à 100 "id" différents et non uniques. Pour chaque identifiant, il y a jusqu'à 5000 lignes. Item2 n'est pas unique, mais les paires (id, item2) sont uniques. Exemple:

 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 

C'est un problème intéressant. Je m'attendrais à ce que la colonne intnt sortinger plus vite que le datetime, car il y a less d'octets par key, donc less d'E / S sur l'index non-cluster. Peut-être que vos données ont beaucoup de lignes item2 avec la même valeur?

Je suggère d'isoler le SQL généré et de l'exécuter dans Management Studio. Les outils de performance SSMS peuvent révéler quelque chose, voir https://msdn.microsoft.com/en-us/library/ff650689.aspx .