Использование триггеров для обновления db-кеша - PullRequest
2 голосов
/ 18 января 2012

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

У некоторых пользователей создание этого агрегата занимает некоторое время, поскольку оно выполняется несколько раз в нескольких группах строк.

Итак, я пытаюсь создать триггер для таблицы, который запускает операции INSERT, UPDATE, DELETE и «кэширует» агрегат в другой таблице.Таким образом, веб-интерфейс, отображающий агрегаты, может просто считывать данные из этой таблицы.

Триггеры INSERT и UPDATE работают очень хорошо и правильно вводят значения.Однако триггер DELETE выглядит так, как будто он не срабатывает.Количество никогда не обновляется при удалении.Это привело меня к мысли, что удаление строки не выполняется до после запуска триггера.Таким образом, триггер действительно работает, но он не замечает, что строка удалена ...

Или мне нужно искать где-то еще?: /

1 Ответ

1 голос
/ 18 января 2012

Предлагаем вместо этого использовать индексированное представление.

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

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

...