Могу ли я запросить SQL Server для кэширования определенного набора результатов?

Существует определенный запрос, который вызывается с ASP.NET-страницы. Я изучил план выполнения этого запроса в Management Studio, а 87% - для сортировки. Мне очень нужна сортировка, иначе отображаемые данные будут бессмысленными.

Есть ли в любом случае, что я могу запросить SQL Server для кэширования отсортированного набора результатов, чтобы он быстрее возвращал данные в последующих запусках?

Или SQL Server достаточно умен, чтобы выполнять обработку кеша, и я ошибаюсь, пытаясь заставить его кэшировать результаты, если это возможно?

Любая соответствующая информация будет высоко оценена и заблаговременно заблагорассудится:)

UPDATE:
Я просто прочитал в статье, что создание представления с кластеризованным индексом приведет к увеличению производительности, поскольку индекс сохранит данные в режиме просмотра на диск. Это правда? Как мне это сделать? Любые статьи?

Ответ 1

Короче говоря, нет: не на конце SQL-сервера; он, естественно, будет загружать данные в память и кэшировать план выполнения, поэтому последующие вызовы могут быть более быстрыми, но они не могут кэшировать результаты.

Параметры:

  • настроить план; сорт звучит агрессивно - вы могли бы денормализовать некоторые данные или добавить индекс (возможно, даже кластерный индекс); могут быть другие вещи, которые мы можем сделать с запросом, если вы его покажете (но настройка без полностью работоспособного БД - это в лучшем случае гадание)
  • кэшируйте результаты на веб-сервере, если это разумно сделать

Ответ 2

Пока вы можете создать индексированный вид как вы намекаете в своем обновлении, вы должны знать, что:

  • Существует множество правил, которые вы должны соблюдать, как при создании представления, так и при обновлении таблиц, на которых он основан, и
  • Просто потому, что есть (кластерный) индекс, который не подразумевает порядок сортировки - вам все равно придется использовать ORDER BY при запросе этой таблицы и
  • Если вы не используете Enterprise edition, вам нужно запросить представление с подсказкой запроса WITH (NOEXPAND)
  • Вы должны указать порядок для индекса, указав ASC и DESC в инструкции CREATE INDEX, а не в CREATE VIEW. "Взломать", чтобы разрешить ORDER BY в представлении (путем определения 100% лучших), не повлияет.

Ответ 3

Опцией, которая используется иногда, является сохранение отсортированных данных во вторичной таблице. Это может быть, например, временную таблицу, которую вы создаете для всего сеанса, или таблицу кэша для всей базы данных.

Ответ 4

Опять же, сам SQL-сервер будет кэшировать частые запросы в памяти. Вы можете протестировать это с помощью анализатора запросов и выполнения сложного запроса несколько раз, каждый раз, когда он будет быстрее. Учитывая это, постоянный кеш может и не понадобиться.

Если я рекомендую использовать таблицу кеша и запускаю ваш запрос и вставляя значения в другую таблицу. Вы можете использовать переменную приложения или другую таблицу sql, чтобы определить, когда снова обновлять кеш.

Пример запроса для вставки в таблицу кэша:

Вставить в кеш Выберите значение, значение из таблицы 1 упорядочить по полю