SQL Server: постоянная таблица «Кэш» между соединениями - PullRequest
0 голосов
/ 10 ноября 2009

У меня есть набор из примерно 1 миллиона строк (приблизительный размер строки: 1,5 КБ), который необходимо «кэшировать», чтобы его могли использовать многие различные части нашего приложения.

Эти строки представляют собой производное / денормализованное «представление» скомпилированных данных из других таблиц. Генерирование этих данных не очень дорого (30-60 секунд), но слишком медленное, чтобы генерировать их «на лету» как часть представления или табличной функции, которую приложение может запросить напрямую. Я хочу обновлять эти данные периодически, возможно, каждые несколько минут.

Моя первая мысль - создать запланированное задание, которое будет обновлять глобальную временную таблицу с этими данными каждые n минут.

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

Я использую Microsoft SQL Server 2000. Обновление во время этого проекта не вариант, но если в 2005/2008/2010 есть функциональность, которая облегчила бы это, я был бы рад услышать об этом. 1011 *

1 Ответ

1 голос
/ 10 ноября 2009

Я бы рекомендовал использовать материализованное представление (индексированное представление AKA).

Ограничения:

  1. Определение представления всегда должно возвращать одинаковые результаты из одних и тех же базовых данных.
  2. Представления не могут использовать недетерминированные функции.
  3. Первый индекс в представлении должен быть кластеризованным, уникальным индексом.
  4. Если вы используете Group By, вы должны включить новый COUNT_BIG (*) в список выбора.
  5. Определение представления не может содержать следующее:

    1. TOP
    2. Текст, столбцы ntext или image
    3. DISTINCT
    4. MIN, MAX, COUNT, STDEV, VARIANCE, AVG
    5. СУММА на обнуляемое выражение
    6. Производная таблица
    7. Функция набора строк
    8. Другой вид
    9. UNION
    10. Подзапросы, внешние соединения, самостоятельные соединения
    11. Полнотекстовые предикаты, такие как CONTAIN или FREETEXT
    12. ВЫЧИСЛИТЬ или ВЫЧИСИТЬ ПО
    13. Невозможно включить порядок в определении вида
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...