2010-06-24 3 views
4

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

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

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

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

+0

Что он подразумевает под этим привязкой приложение к деталям SQL? –

+0

Теперь у вас есть схема индексирования, которая охватывает как вашу базу данных, так и приложение, такое как перечисление .NET, которое соответствует вашим аргументам в вашей хранимой процедуре или, возможно, строковое представление запрашиваемого столбца. – cweston

ответ

0

Если вы используете метод «Заказ по методу», каждый раз, когда вы просматриваете страницу, вы будете вызывать такую ​​же нагрузку на сервере, потому что вы выполняете запрос, а затем фильтруете данные.

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

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

0

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

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

Erick

1

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

Смежные вопросы