Можно ли кэшировать результирующий набор запроса на выборку в базе данных? - PullRequest
0 голосов
/ 20 октября 2011

Я пытаюсь оптимизировать поисковый запрос, который наиболее часто используется в нашей системе.Пока что я добавил несколько отсутствующих индексов, и это немного помогло.Но я хочу еще больше снизить нагрузку на сервер БД.Одним из вариантов, который я буду использовать, является кэширование набора результатов в виде LIST в кэше asp.net, чтобы мне не приходилось часто нажимать на базу данных.

Однако мне было интересно, есть ли способ кэшировать некоторые части запроса select в db.Например, для результатов поиска мы рассматриваем только тех пользователей, которые были активны в течение последних 180 дней и для которых для ресурса share-info установлено значение true.Так что это как супернабор, который БД обрабатывает каждый раз, а затем применяет другие условия, такие как указанная категория, город и т. Д., Которые передаются.Можно ли каким-то образом кэшировать супернабор, чтобы я мог выполнять запросы к супернабору, а не выполнять запрос ко всей таблице?Поможет ли создание View в этом?Я немного не решаюсь создать представление, так как я читаю, что управление представлениями может быть непроизводительным и отнимает некоторую гибкость при модификации таблиц.

Я использую Sql-Server 2005, поэтому не могу создать отфильтрованный индекс для таблицыЯ думаю, это было бы полезно.

Ответы [ 2 ]

1 голос
/ 20 октября 2011

Я согласен с @Neville K. SQL Server достаточно умён в кэшировании данных в памяти.Вы можете увидеть ограниченные / нет увеличения производительности за ваши усилия.

Вы можете рассмотреть индексированные представления (только Enterprise Edition) http://technet.microsoft.com/en-us/library/cc917715.aspx для вашего подзапроса.

0 голосов
/ 20 октября 2011

Конечно, это возможно, но я не уверен, поможет ли это.

Вы можете создать запланированное задание (возможно, один раз за ночь), которое заполняет таблицу с именем active_users_with_share_info, обрезая ее, а затем повторно заполняет ее на основе выбранного запроса, отфильтровывая пользователей, активных за последние 180 дней, с помощью "share_info = правда".

Затем вы можете присоединить свой поисковый запрос к этой таблице.

Однако я сомневаюсь, что это принесет много пользы - SQL Server достаточно умён в кэшировании. Если вы не имеете дело с огромными объемами данных (100 миллионов записей) или очень ограниченным аппаратным обеспечением, я сомневаюсь, что вы получите какие-либо ощутимые улучшения производительности - но непременно попробуйте!

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

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