Pour mettre en place le scénario, Disons que j'ai 100000 lignes dans le tableau et il se développe de plus en plus chaque jour. Cette file d'attente prend actuellement plus de 2 secondes pour récupérer seulement environ 40 ou 50 lignes de la table.Aidez-moi à accélérer cette requête LINQ, s'il vous plaît?
Les données de ce tableau sont regroupées par références DateTime, donc je commence le regroupement de toutes les données par DateTime car c'est la seule valeur égale aux autres lignes de la table. Chaque groupe de lignes peut être de 1 à 5 lignes MAX. Je sélectionne ensuite les lignes groupées, sépare les données et les affiche à l'utilisateur. Le problème que je peux voir est que je provoque un EXIST et un groupe par dans le SQL. Je dois sélectionner toutes les 40 lignes à la fois pour rendre la file d'attente plus rapide, mais je choisis chaque groupe dans une boucle FOR. Alors, comment puis-je faire cette file d'attente plus rapidement? C'est le Laggiest de tous et mes utilisateurs se plaignent du temps d'attente de 2 secondes. S'il vous plaît aider.
(from yy in Data_Captured_Type_Militaries
where yy.DateTime_Added >= DateTime.UtcNow.AddHours(-72)
(from xx in Data_Captured_Type_Militaries
where xx.DateTime_Added >= DateTime.UtcNow.AddHours(-72)
group xx by xx.DateTime_Added into gg
select gg.Key).Contains(yy.DateTime_Added)
select new
{
yy.Elites,
yy.DateTime_Added,
yy.Uid,
yy.Military_Location,
yy.Province_ID,
yy.Time_To_Return
}).ToList()
Que traduisez:
SELECT [t0].[Elites], [t0].[DateTime_Added], [t0].[uid] AS [Uid],[t0].[Military_Location], [t0].[Province_ID], [t0].[Time_To_Return]
FROM [Data_Captured_Type_Military] AS [t0]
WHERE (EXISTS (
SELECT NULL AS [EMPTY]
FROM (
SELECT [t1].[DateTime_Added]
FROM [Data_Captured_Type_Military] AS [t1]
WHERE [t1].[DateTime_Added] >= @p0
GROUP BY [t1].[DateTime_Added]
) AS [t2]
WHERE [t2].[DateTime_Added] = [t0].[DateTime_Added]
)) AND ([t0].[DateTime_Added] >= @p1)
Je me souviens avoir joué à ce jeu il y a plusieurs années .... :) – Jimmy
Merci Jimmy, mais ça n'aide certainement pas. lol –