В чем разница между представлениями и материализованными представлениями в Oracle?


Материализованные представления основаны на диске и периодически обновляются в зависимости от определения запроса.
Представления являются только виртуальными и запускают определение запроса каждый раз, когда к ним обращаются.
@Marthinus - это правильно, за исключением случая материализованного представления, которое является REFRESH ON COMMIT - MV вернет именно те данные, которые были зафиксированы.
В чем смысл DISK based? Означает ли это, что таблица не является частью ДИСКА? Хранится ли он в файле, и доступ к ДИСКУ быстрее, чем доступ к файлу ....?
@KanagaveluSugumar «На основе ДИСКА» означает, что данные физически хранятся на жестком диске компьютера.
@dacracot Спасибо! но что я понял, мой вопрос; Только MView является частью ДИСКА, а фактические таблицы БД не являются частью ДИСКА ..?
@KanagaveluSugumar Да, реальные таблицы также записываются на диск.
@dacracot Спасибо! я думаю, вы хотите сказать, кроме таблиц БД на ДИСКЕ; этот MVIEW также поддерживает таблицу, разрешая все объединения. Так что во время выполнения достаточно доступа к одной таблице; и нет необходимости запрашивать условия соединения в нескольких таблицах, что обычно выполняется в обычном представлении. Спасибо!
что произойдет, если данные материализованного представления больше не будут выполняться где условие? будут ли данные удалены после обновления?
Представление использует запрос для извлечения данных из базовых таблиц.
Материализованное представление - это таблица на диске, которая содержит набор результатов запроса.
Материализованные представления в основном используются для повышения производительности приложения, когда невозможно или нежелательно использовать стандартное представление с примененными к нему индексами. Материализованные представления можно регулярно обновлять либо с помощью триггеров, либо с помощью опции ON COMMIT REFRESH. Для этого требуется несколько дополнительных разрешений, но в этом нет ничего сложного. ON COMMIT REFRESH используется как минимум с Oracle 10.
В материализованном представлении можно указать параметр «ОБНОВИТЬ ПРИ ЗАКЛЮЧЕНИИ».
Спасибо! Я обновлю ответ. Вы знаете, когда эта функция была добавлена в Oracle?
Представления по сути представляют собой логические структуры, подобные таблицам, которые заполняются на лету заданным запросом. Результаты запроса представления не хранятся где-либо на диске, и представление воссоздается каждый раз при выполнении запроса. Материализованные представления - это фактические структуры, хранящиеся в базе данных и записанные на диск. Они обновляются на основе параметров, определенных при их создании.
В чем смысл DISK based? Означает ли это, что таблица не является частью ДИСКА? Хранится ли он в файле, и доступ к ДИСКУ быстрее, чем доступ к файлу ....?
Они оценивают данные в таблицах, лежащих в основе определения представления во время запроса представления. Это логическое представление ваших таблиц без каких-либо данных, хранящихся где-либо еще.
Положительным моментом является то, что это будет всегда возвращать вам самые свежие данные. Обратной стороной мнения является то, что его производительность зависит от того, насколько хорош оператор выбора, на котором основано представление. Если оператор выбора, используемый представлением, объединяет множество таблиц или использует объединения на основе неиндексированных столбцов, представление может работать плохо.
Они похожи на обычные представления в том, что они представляют собой логическое представление ваших данных (на основе оператора select), однако базовый набор результатов запроса был сохранен в таблице. Достоинством этого является то, что когда вы запрашиваете материализованное представление, вы запрашиваете таблицу, которое также может быть проиндексировано.
Кроме того, поскольку все объединения были разрешены во время обновления материализованного представления, вы платите за соединение один раз (или так часто, как обновляете свое материализованное представление), а не каждый раз, когда вы выбираете из материализованного представления. Кроме того, с включенной перезаписью запроса Oracle может оптимизировать запрос, который выбирает из источника вашего материализованного представления, таким образом, что он вместо этого читает из вашего материализованного представления. В ситуациях, когда вы создаете материализованные представления как формы агрегированных таблиц или как копии часто выполняемых запросов, это может значительно ускорить время отклика вашего приложения конечного пользователя. Файл Обратной стороной является то, что данные, которые вы получаете обратно из материализованного представления, актуальны только на момент последнего обновления материализованного представления..
Материализованные представления можно настроить на обновление вручную, по заданному расписанию или на основе базы данных, обнаруживающей изменение данных из одной из базовых таблиц. Материализованные представления можно постепенно обновлять, комбинируя их с журналами материализованных представлений, которые действовать как источники сбора данных об изменениях для базовых таблиц.
Материализованные представления чаще всего используются в приложениях для хранилищ данных / бизнес-аналитики, где запрос к большим таблицам фактов с тысячами миллионов строк приведет к увеличению времени ответа на запрос, что приведет к непригодности приложения.
Материализованные представления также помогают гарантировать согласованный момент времени, как и изоляция моментального снимка.
+1 за подробное объяснение, но какова обратная сторона переписывания запросов? Если перезапись запроса позволит Oracle еще больше оптимизировать запрос, мы должны ВСЕГДА разрешать перезапись запроса, не так ли?
@Rosdi, он сказал это: «данные, которые вы получаете обратно из материализованного представления, актуальны только тогда, когда последний раз обновлялся материализованный вид»
Добавляя к довольно обстоятельному ответу Майка Макаллистера ...
Материализованные представления могут быть настроены на обновление автоматически только через обнаружение изменений базой данных, когда запрос представления рассматривается компилятором как просто. Если это будет сочтено слишком сложным, то он не сможет настроить, по сути, внутренние триггеры для отслеживания изменений в исходных таблицах, чтобы обновлять только измененные строки в таблице mview.
Когда вы создаете материализованное представление, вы обнаружите, что Oracle создает и mview и как одноименная таблица, что может сбивать с толку.
Таблицы, поддерживающие материализованное представление, не имеют того же имени, что и представление.
@ Джеффри Кемп, ты уверен? В принятом здесь ответе stackoverflow.com/a/33552513 утверждается иное. Хотя да, в 2010 году все могло быть иначе, когда вы комментировали ...
Мой комментарий выше, должно быть, относился к более старой версии (вероятно, 9i). Вы правы, у MV есть таблица с таким же именем, по крайней мере, в современных версиях.
Материализованное представление - таблица на диске, содержащая набор результатов запроса
Нематериальный взгляд - запрос, который извлекает данные из базовой таблицы
Вид: View - это просто именованный запрос. Он ничего не хранит. Когда есть запрос в представлении, он выполняет запрос определения представления. Фактические данные взяты из таблицы.
Материализованные представления: Физически хранит данные и периодически обновляется. При запросе MV он предоставляет данные из MV.
Материализованные представления - это логическое представление данных, управляемых запросом выбора, но результат запроса будет сохранен в таблице или на диске, а также определение запроса также будет сохранено в базе данных.
Производительность материализованного представления лучше, чем у обычного представления, потому что данные материализованного представления будут храниться в таблице, а таблица может быть проиндексирована, поэтому присоединение выполняется быстрее, также соединение выполняется во время обновления материализованных представлений, поэтому нет необходимости каждый раз запускать оператор соединения, как в случае просмотра.
Другое отличие состоит в том, что в случае представления мы всегда получаем последние данные, но в случае материализованного представления нам необходимо обновить представление для получения последних данных. В случае материализованного представления нам нужен дополнительный триггер или какой-то автоматический метод, чтобы мы могли обновлять MV, это не требуется для представлений в базе данных.
Также, когда вам нужна производительность для данных, которые не должны обновляться с точностью до секунды, лучше использовать материализованные представления, но ваши данные будут старше, чем в стандартном представлении. Обычно отчеты бизнес-аналитики получают большую выгоду от материализованных представлений.