Выполнение агрегатных функций на больших редко меняющихся наборах данных - PullRequest
3 голосов
/ 25 августа 2009

Мне нужно извлечь некоторую информацию управления (MI) из данных, которые обновляются в течение ночи. Я буду использовать агрегатные функции для генерации MI из таблиц с сотнями тысяч и, возможно, миллионами строк. Информация будет отображаться на веб-странице.
Критическим фактором здесь является эффективность обработки агрегатными функциями SQL Server.
Я столкнулся с двумя вариантами генерации данных:

  1. Запись сохраненных процедур / представлений для генерации информации из необработанных данных, которые вызываются каждый раз, когда кто-то обращается к странице
  2. Создание таблиц, которые обновляются ежедневно и служат кешем для MI

Какой наилучший подход выбрать?

Ответы [ 2 ]

4 голосов
/ 25 августа 2009

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

Одна вещь, которую вы можете рассмотреть, поскольку у вас есть SQL Server, это службы Analysis Services. Создав многомерную базу данных или куб, все эти агрегации происходят автоматически, и вы можете быстро и детально анализировать данные, чтобы находить числа, а не пытаться писать отчеты, которые собирают эти числа. Потратьте 10 минут и посмотрите вступительное видео , и я думаю, вы по-настоящему оцените мощь SSAS.

3 голосов
/ 25 августа 2009

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

Однако вы также можете использовать индексированное представление, которое, если оно правильно спроектировано и используется вместе с подсказкой таблицы NO EXPAND, может значительно повысить производительность.

Индексированные представления SQL 2005

Индексированные представления SQL 2008

...