Код: Выделить всё
[Index(nameof(ItemId))]
public class DataSnapshot
{
[Key]
public long SeqNo { get; set; }
[Required]
public string ItemId { get; set; }
[Required]
public string Data { get; set; }
[Required]
public DateTimeOffset CreatedTimestamp { get; set; }
}
Код: Выделить всё
var latestDataSnapshots = context.DataSnapshots
.GroupBy(x => x.ItemId)
.Select(x => x.OrderByDescending(y => y.CreatedTimestamp).First())
.ToListAsync();
Код: Выделить всё
SELECT "t0"."SeqNo",
"t0"."CreatedTimestamp",
"t0"."ItemId",
"t0"."Data"
FROM (SELECT "e"."ItemId"
FROM "DataSnapshots" AS "e"
GROUP BY "e"."ItemId") AS "t"
LEFT JOIN (SELECT "t1"."SeqNo",
"t1"."CreatedTimestamp",
"t1"."ItemId",
"t1"."Data"
FROM (SELECT "e0"."SeqNo",
"e0"."CreatedTimestamp",
"e0"."ItemId",
"e0"."Data"
ROW_NUMBER() OVER(PARTITION BY "e0"."ItemId" ORDER BY "e0"."CreatedTimestamp" DESC) AS "row"
FROM "DataSnapshots" AS "e0") AS "t1"
WHERE "t1"."row"
Может ли кто-нибудь предложить что-нибудь, что мы можем сделать, чтобы сделать этот запрос быстрее/эффективнее? Любая помощь приветствуется.
Мы полностью контролируем как БД, так и код C#. Мы используем .NET 6.0 и новейшие пакеты Entity Framework 6.0.0.
Подробнее здесь: [url]https://stackoverflow.com/questions/78825546/improve-ef-query-performance-groupby-orderbydescending-first[/url]
Мобильная версия