Каков наилучший способ временно сохранить результаты длительного SP? - PullRequest
0 голосов
/ 13 марта 2012

У меня есть хранимая процедура TSQL, которая может работать в течение нескольких минут и возвращать несколько миллионов записей, мне нужно отобразить эти данные в сетке ASP.NET (точнее, Infragistics WebDataGrid). Очевидно, что я не хочу возвращать все данные сразу, и мне нужно настроить какие-то параметры подкачки - каждый раз, когда пользователь выбирает другую страницу - другая часть данных загружается из БД. Но я не могу запустить SP каждый раз, когда запрашивается новая страница - это займет слишком много времени.

Каков наилучший способ сохранения данных из SP, поэтому, когда пользователь выбирает новую страницу - новая часть данных загружается простым SELECT ... WHERE из этого временного хранилища данных?

Ответы [ 2 ]

1 голос
/ 13 марта 2012

Несколько вариантов

One: Если пользователь только перенаправляет страницы вперед, вы можете просто оставить соединение открытым и использовать DataReader. Просто .Read () по мере необходимости.

Два: Создайте таблицу #temp, используя ID пользователя как часть имени для сохранения результатов. Мне не нравится это, как будто пользователь прерывает иногда таблицы остаются. Около 1/2 секунды нажмите, чтобы создать и удалить #temp. Сохраните все результаты или только PK и создайте детали страницы по запросу.

Три: Используйте DataReader для считывания PK в список <>. Это быстрее, чем вы думаете. Этот список идет только в IIS (не в браузер). На список можно ссылаться по порядковому номеру [] и сохраняет сортировку. Получите детали для страницы по мере необходимости. Проблема здесь в том, что PK в (3,9,2,6) не будет возвращать их в этом порядке. Я использую TVP, чтобы передать заказ, PK, таким образом, страница отсортирована по заказу. Я делаю именно это и получаю загрузки страниц для объектов с 20 свойствами по 40 строк за раз, и это занимает менее 1/2 секунды. Сделайте один запрос на таблицу (НЕ один на строку), затем соберите присваиваемые свойства в .NET Используйте DataReader (не DataTable). И вы даже можете запустить программу чтения на фоновом компьютере и вернуть обратно первую страницу ПК, используя прогрессированный обмен.

1 голос
/ 13 марта 2012

Рассматриваете ли вы Пейджинг на стороне сервера (статья 2005 года, но будет работать с 2008 и CTE). Кроме того - просто интересно, есть ли причина, по которой вы возвращаете столько строк? Я не вижу очень полезного использования человеком страницы для просмотра миллионов записей, даже если размер страницы был 1000.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...