Повышение производительности запросов EF — сначала GroupBy OrderByDescendingC#

Место общения программистов C#
Anonymous
Повышение производительности запросов EF — сначала GroupBy OrderByDescending

Сообщение Anonymous »

У нас есть следующий класс и соответствующая таблица БД:

Код: Выделить всё

[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();
Этот запрос преобразуется в следующий SQL:

Код: Выделить всё

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]

Вернуться в «C#»