Нематериализованные представления - это просто предварительно упакованные SQL-запросы. Они выполняются так же, как и любые производные таблицы / встроенные представления. Несколько ссылок на одно и то же представление запускают запрос, который представление содержит для каждой ссылки. IE:
CREATE VIEW vw_example AS
SELECT id, column, date_column FROM ITEMS
SELECT x.*, y.*
FROM vw_example x
JOIN vw_example y ON y.id = x.id
... переводится в бытие:
SELECT x.*, y.*
FROM (SELECT id, column, date_column FROM ITEMS) x
JOIN (SELECT id, column, date_column FROM ITEMS) y ON y.id = x.id
Кэширование
Основным преимуществом является кэширование, поскольку запрос будет идентичным. Запросы кэшируются, включая план выполнения, чтобы впоследствии выполнить запрос быстрее, поскольку план выполнения уже создан. Кэширование часто требует, чтобы запросы были идентичны с точки зрения чувствительности к регистру, и срок действия истекает
Predicate Pushing
Другим потенциальным преимуществом является то, что представления часто допускают «предикатное нажатие», когда критерии, указанные в представлении, могут быть вставлены в запрос, который представление оптимизатором представляет. Это означает, что запрос может сканировать таблицу один раз, а не сканировать таблицу, чтобы представить набор результатов для внешнего / окончательного запроса.
SELECT x.*
FROM vw_example x
WHERE x.column = 'y'
... может быть интерпретирован оптимизатором как:
SELECT id, column, date_column
FROM ITEMS
WHERE x.column = 'y'
Решение об использовании предикатов принимается исключительно оптимизатором. Мне неизвестно о какой-либо способности разработчика принимать решение, только то, что оно действительно зависит от запроса, который использует представление, и от того, какие дополнительные критерии применяются.
Комментарий к типичному использованию нематериализованных представлений
К сожалению, очень часто можно увидеть нематериализованное представление SQL, используемое только для инкапсуляции для упрощения написания запросов - упрощение, которое также не рекомендуется. SQL основан на SET и не очень хорошо оптимизируется при использовании процедурных подходов. Размещение слоев друг над другом также не рекомендуется.
Обновление просмотров
Нематериализованные представления также можно обновлять, но существуют ограничения, поскольку представление может быть сделано из множества таблиц, соединенных вместе. Обновляемое нематериализованное представление не дает пользователю возможности вставлять новые записи, но может обновлять существующие. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *) CHECK OPTION
зависит от запроса, используемого для создания представления для принудительного ограничения степени обновления, но этого недостаточно, чтобы гарантировать, что ничего не произойдет . Это демонстрирует, что единственным надежным средством защиты от нежелательного добавления / редактирования / удаления является предоставление надлежащих привилегий пользователю , предпочтительно с помощью роли.