Я знаком с индексированными представлениями SQL Server (или материализованными представлениями Oracle), мы используем их в наших приложениях OLAP. У них есть действительно крутая функция, позволяющая узурпировать план выполнения и переназначить его на индексированное представление без необходимости изменения существующего кода.
IE. Допустим, у меня был SPROC, который был очень дорогим соединением.
ВЫБЕРИТЕ [НЕКОТОРЫЕ КОЛОННЫ]
ИЗ Таблицы 1 ВНУТРЕННЕЕ СОЕДИНЕНИЕ Таблица 2 [ДЕТАЛИ]
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Таблица 3 [БОЛЬШЕ СОЕДИНЕНИЙ] ...
Если я создал индексированное представление, содержащее аналогичный набор результатов, оптимизатор запросов, скорее всего, отправит SPROC в мое индексированное представление, а не в базовые таблицы, и я получу значительное увеличение производительности.
Теперь предположим, что я хотел использовать индексированные представления в OLTP!? Я имею в виду, что большинство OLTP (таких как этот сайт) относительно тяжело читаются, если у них есть дорогие соединения, тогда мы могли бы ускорить их на тонну И потенциально уменьшить конфликт блокировки (http://www.codinghorror.com/blog/archives/001166.html а>). Еще лучше то, что вам не придется менять какой-либо код, просто создайте индексированное представление.
Но это также означает, что база данных становится больше, поскольку нам нужно хранить копию этих данных в индексированном представлении...
Кто-нибудь когда-нибудь использовал индексированные представления для решения проблем, связанных с конфликтами или скоростью, в OLTP? Почему я никогда не видел, чтобы это использовалось?