Источник данных.nettiers не применяет фильтр к запросу
У меня есть таблица с 13K записей и sql машина немного старая.
На проблемной странице у меня есть источник данных netTiers, который идет по таймауту. Моя проблема в том, что на page_load я установил фильтр:vwImmobileCommessaAttivoDataSource.Filter = "ImmobileId = '" + Request.QueryString["ImmobileId"] + "'";
что изменить номер результата с 13K на 10. Но я вижу, что запрос на генерацию:
BEGIN
SELECT * FROM [dbo].[vwImmobileCommessaAttivo]
ORDER BY [CommessaId]
-- get total count
SELECT @@ROWCOUNT AS TotalRowCount;
END
без фильтра и уходит в таймаут.
Есть ли способ ускорить запрос? включая мой фильтр?
1 ответ
Я лично использую сетки DevExpress и связываюсь непосредственно с ними, используя что-то вроде:
grid.DataSource = new vwImmobileCommessaAttivoService().Find(string.format("ImmobileId='{0}'", Request.QueryString["ImmobileId"]));
grid.DataBind();
Если ваш фильтр только сбрасывает вас с 13 тыс. До 10 тыс., А время ожидания составляет 13 тыс. Записей, то я думаю, что вам нужно будет изучить какую-либо форму подкачки, чтобы получить меньше записей. Если вы включаете функции SQL2005, то там есть встроенный пейджинг, но я никогда не пробовал лично, поэтому не знаю, насколько хорошо он работает. Пейджинг Nettiers по умолчанию по-прежнему получает все записи из sql и выполняет пейджинг внутри.
С точки зрения вашего существующего кода на самом деле делать то, что вы ожидаете. .Filter работает, только если для EnablePaging и EnableSorting установлено значение false. Вы пробовали вместо этого:
vwImmobileCommessaAttivoDataSource.SelectMethod = vwImmobileCommessaAttivoSelectMethod.Find;
vwImmobileCommessaAttivoDataSource.WhereClause = "ImmobileId = '" + Request.QueryString["ImmobileId"] + "'";