Пейджинг больших наборов данных - SQL Server (лучшая практика) - PullRequest
4 голосов
/ 24 июня 2010

Меня интересует, каковы лучшие практики для разбиения на страницы больших наборов данных (более 100 000 записей) с использованием ASP.NET и SQL Server.

Я использовал SQL-сервер для выполненияразбиение на страницы, и, хотя это кажется идеальным решением, проблемы возникают вокруг динамической сортировки с этим решением (операторы case для предложения order by для определения столбцов и операторов case для порядка ASC / DESC).Я не фанат этого, так как он не только связывает приложение с деталями SQL, но и является кошмаром по обслуживанию.

Открыт для других решений ...

Спасибо всем.

Ответы [ 3 ]

1 голос
/ 29 сентября 2012

По моему опыту, 100 000+ записей - это слишком много записей для пользователя, который их просматривает. В прошлый раз, когда я сделал это, я предоставил фильтры. Таким образом, пользователи могут использовать их и просматривать отфильтрованные (меньшее количество) записи и упорядочивать их, поэтому подкачка и упорядочивание стали намного быстрее (чем подкачка / упорядочивание на целых 100 000+ записей). Если пользователь не использовал фильтры, я показывал «предупреждение», что будет возвращено большое количество записей и будут задержки. Добавление указателя на упорядоченный столбец, как предложил Эрик, также определенно поможет.

0 голосов
/ 22 октября 2010

Я хотел бы добавить быстрое предложение к ответу Радж. Если вы создадите временную таблицу с таблицей формата ##, она сохранится. Однако он также будет использоваться всеми подключениями.

Если вы создадите индекс для столбца, который будет отсортирован, стоимость этого метода будет намного ниже.

Erick

0 голосов
/ 24 июня 2010

Если вы используете порядок по методике, каждый раз, когда вы просматриваете страницу, вы будете вызывать одну и ту же нагрузку на сервер, потому что вы выполняете запрос, а затем фильтруете данные.среды без пула соединений, я создал и оставил соединение открытым до тех пор, пока не будет завершено разбиение на страницы.Создала таблицу #Temp для соединения только с идентификаторами строк, которые необходимо вернуть, и добавила поле IDENTITY к этому набору строк.Затем выполните разбиение по страницам, используя эту таблицу, чтобы получить самые быстрые результаты.

Если вы ограничены средой с пулами соединений, то таблица #Temp теряется, как только соединение закрывается.В этом случае вам придется кэшировать список идентификаторов на сервере - никогда не отправляйте их клиенту для кэширования.

...