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

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

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

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

Любая важная информация будет высоко оценена, и большое спасибо заранее:)

ОБНОВЛЕНИЕ:
Я только что прочитал в статье, которая создает представление сКластерный индекс повысит производительность, потому что индекс сохранит данные в представлении на диске.Это правда?Как мне это сделать?Любые статьи?

Ответы [ 4 ]

12 голосов
/ 04 ноября 2010

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

Опции:

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

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

  1. Существует довольно много правил, которым вы должны следовать как при создании представления, так и при обновлении таблиц, на которых оно основано, и,
  2. То, что существует (кластеризованный) индекс, не подразумевает порядок сортировки - вам все равно придется использовать ORDER BY при запросе этой таблицы, и,
  3. Если вы не используете Enterprise Edition, вам нужно запросить представление с помощью WITH (NOEXPAND) подсказка запроса
  4. Вы бы указали порядок для индекса, указав ASC и DESC в операторе CREATE INDEX, а не в CREATE VIEW. «Хак», разрешающий ORDER BY в представлении (указав верхние 100 процентов), не будет иметь никакого эффекта.
2 голосов
/ 04 ноября 2010

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

1 голос
/ 04 ноября 2010

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

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

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

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

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