Свободный запрос nhibernate, требующий много времени для сортировки сопоставленной формулы с подкачкойC#

Место общения программистов C#
Anonymous
Свободный запрос nhibernate, требующий много времени для сортировки сопоставленной формулы с подкачкой

Сообщение Anonymous »

У нас есть сетка данных для отображения записей участников для наших клиентов. Недавно нам было поручено добавить пейджинг в наше приложение, чтобы наши крупные клиенты (более 500 000 участников).

Наша таблица, из которой мы извлекаем данные, имеет 10 столбцов. При переносе наших данных в приложение мы добавили 3 дополнительных столбца, которые являются вычисляемыми полями

т.е.

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

SELECT SUM(tableX.Cost) FROM tableX WHERE tableX.ID = this_.ID
где «this_» — это псевдоним нашей таблицы участников, а tableX представляет другую таблицу, из которой нам нужно получить данные.

В нашем запросе мы должны предоставить возможность упорядочивать столбцы, но я заметил, что когда я пытаюсь упорядочить вычисляемые поля, это занимает значительное количество времени по сравнению с тем, когда я ЗАКАЗЫВАЮ ПО существующему столбцу в таблице. Это имеет смысл, поскольку это занимает больше времени, но когда загрузка всего 1000 записей занимает пару минут, а нужно просмотреть более 500 страниц. Тогда я чувствую, что это делает пейджинг бессмысленным.

Я немного подумал о возможности создания кэша 2-го уровня с помощью nhibernate, но из того, что я прочитал до сих пор, я Не уверен, что решит эту проблему.

Кстати, одна из карт:

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

Map(x => x.Cost)
.Formula(@"(SELECT SUM(_Claims.Cost) FROM _Claims WHERE _Claims.ID = this_.ID")
.Nullable();
и по запросу

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

    var list = CurrentSession()
.SetFirstRsult(startPos)
.SetMaxResults(1000)
.SetTimeout(100)
.Add(Restrictions.Eq("ClientID", _clientID));

if(isASC)
{
list.AddOrder(Order.Asc(Projetions.Property(_propertyString)));
}
else
{
list.AddOrder(Order.Desc(Projetions.Property(_propertyString)));
}

return list.List();
У меня заканчиваются идеи для этого. Так что, если кто-нибудь сможет указать нам правильное направление, я буду очень признателен.

Спасибо

Подробнее здесь: https://stackoverflow.com/questions/991 ... ith-paging

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