Повышение производительности запросов 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]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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