Могу ли я запросить 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 упорядочить по полю