Организция получения результатов поиска в СУБД
От: antonmo Россия clrus.ru
Дата: 24.07.06 02:51
Оценка:
Здравствуйте.
Может быть, кому-то и покажется вопрос простым, но для меня это очень важно.
Суть дела:
Дано:
Есть база данных МSSQL и куча таблиц с кучей записей.
Есть aspx страница, генерирующая и выполняющая запрос к вышеуказанной СУБД.
Задача:
Получить необходимое кол-во записей из БД, например первые 20 или четвертые 20.
Отобразить полученные записи на aspx странице. Если записей больше 20 разбить на несколько страниц.
Отобразить кол-во доступных страниц, на каждой из которых еще по 20 записей.

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

На мой взгляд, есть несколько путей решения данной задачи:
1) с помощью временных таблиц.
Результат запроса сохраняется в таблицу со сгенерированным именем.
Получаем кол-во строк в таблице и необходимое кол-во записей.
Сохраняем имя таблицы и в следующих запросах используем эту таблицу.
По истечении определенного времени, начиная с последнего обращения к сгенерированной таблице,
удаляем ее.


Результат: плюсы: снижение нагрузки на процессор (за счет уменьшения объема данных), уменьшение времени
выполнения запроса, пользователь всегда получает данные актуальные на момент начала поиска.
минусы: увеличение объема базы данных
2) без временных таблиц
с помощью двух запросов получаем кол-во найденных записей и определенное их кол-во
отображаем их пользователю, а на следующие запросы все повторяем заново.

Результат: плюсы: неизменный размер базы данных
минусы: увеличение нагрузки на процессор (за счет неизменности объема данных и повторных запросах)
увеличение времени выполнения 2-го и более запроса.

Вот так я вижу эту задачу.
Очень хотел бы узнать ваше мнение по решению данной задачи. Ресурсы выч. системы не важны, чем больше эффективность, тем лучше.
Заранее благодарен.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.