Материализованная таблица запросов в SQL Server 2005 - PullRequest
1 голос
/ 25 апреля 2010

В DB2 есть поддержка Материализованной таблицы запросов (MQT). По сути, вы пишете запрос и создаете MQT. Но отличие от View заключается в том, что запрос выполняется предварительно, а полученные данные хранятся в MQT, и есть несколько вариантов обновления / синхронизации MQT с базовыми таблицами.

Мне нужна та же функциональность в SQL Server. Есть ли способ достичь того же результата?

У меня есть таблицы с миллионами строк, и я хочу показать сводку (например, общее количество участников, общие расходы и т. Д.) На панели инструментов. Поэтому я не хочу считать каждый раз, когда пользователь попадает на панель мониторинга, я хочу сохранить их в таблице и хочу, чтобы эта таблица обновлялась каждую ночь.

Любые советы, ответы, предложения и идеи приветствуются. Спасибо.

Ответы [ 4 ]

2 голосов
/ 25 апреля 2010

Это показывает, что индексированное представление не предварительно выполнить запрос и сохранить его результат и не дает освежиться опции.

Но это действительно так !!

«Индексированное представление» - это материализация представления в SQL Server - полученные данные собираются и сохраняются на диске. Таким образом, запрос предварительно выполнен, в этом смысле.

И нет, вам не нужно индексировать каждое поле - только тот факт, что вы добавляете кластеризованный индекс в представление (на основе подходящего столбца), фактически сохраняет полученные данные в диск. В SQL Server кластерный индекс является данными, на самом деле.

Ознакомьтесь с этой статьей в электронной документации по SQL Server 2000: Создание индексированного представления

Microsoft четко пишет:

Когда в представлении создается уникальный кластеризованный индекс, представление выполняется , а набор результатов сохраняется в базе данных точно так же, как таблица с Кластерный индекс сохраняется.

1 голос
/ 25 апреля 2010

Материализованные представления основаны на исходной таблице (или таблицах) и обновят свои данные немедленно , когда исходные таблицы будут обновлены. Это мощная функция, но, основываясь на обсуждении предыдущих постов, она не похожа на то, что вы хотите или нуждаетесь.

Простой способ сделать то, что вы хотите, это:

  • Создать отдельную таблицу, содержащую агрегированные (обобщенные) данные
  • Напишите процесс (предпочтительно хранимую процедуру) для вычисления и сохранения этих данных
  • Определите, как и когда запустить эту процедуру

Должны ли сводные данные быть подготовлены в (или «по состоянию») в определенное время, например, в 12:01? Если это так, создайте задание агента SQL и настройте его для запуска процедуры в 00:01. Могут ли сводные данные быть подготовлены только после того, как одна или две предыдущие процедуры подготовили или завершили данные за предыдущий день? Если это так, добавьте вызов в процедуру подведения итогов в конце этого процесса.

(Как это можно настроить в DB2? Как определить или настроить при обновлении MQT?)

1 голос
/ 25 апреля 2010

Да, посмотрите на эту статью http://msdn.microsoft.com/en-us/library/cc917715.aspx о "Индексированном представлении"

и посмотрите также на (С РАЗМЕЩЕНИЕМ) параметр

0 голосов
/ 25 апреля 2010

Что вы думаете об этом Репликация , Они сказали, что почти каждый бизнес-сценарий рассматривает репликацию для представления данных

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