У нас есть сетка данных для отображения записей участников для наших клиентов.Недавно нам было поручено добавить пейджинг в наше приложение, чтобы наши крупные клиенты (более 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<Member>();
У меня заканчиваются идеи для этого.Так что, если кто-то может указать нам правильное направление, я буду очень признателен.
Спасибо