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

Ответы:

357

Материализованные представления основаны на диске и периодически обновляются на основе определения запроса.

Представления являются только виртуальными и запускают определение запроса при каждом обращении к ним.

dacracot
источник
54
Также, когда вам нужна производительность для данных, которые не должны обновляться с точностью до секунды, материализованные представления будут лучше, но ваши данные будут старше, чем в стандартном представлении. Обычно отчеты BI получают большую выгоду от материализованных представлений.
Мартин
29
@Martinus - это правильно, за исключением случая с материализованным представлением REFRESH ON COMMIT - MV возвращает именно те данные, которые были зафиксированы.
Джеффри Кемп
2
В чем смысл DISK на основе? Значит ли это, что таблица не является частью DISK? Хранится ли он в файле и доступ к DISK быстрее, чем доступ к файлу ....?
Канагавелу Сугамар
1
@KanagaveluSugumar Да, фактические таблицы также записываются на диск.
дакракот
5
@dacracot Спасибо! я думаю, что вы хотите сказать, кроме таблиц БД в DISK; этот MVIEW также поддерживает таблицу, разрешая все соединения. Так что во время выполнения достаточно доступа к одной таблице; и нет необходимости запрашивать несколько таблиц для условий соединения, что обычно выполняется обычным представлением. Спасибо!
Канагавелу Сугамар
333

Просмотры

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

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

Материализованные взгляды

Они аналогичны обычным представлениям в том смысле, что они представляют собой логическое представление ваших данных (основанное на операторе select), однако базовый набор результатов запроса был сохранен в таблице . Плюсом этого является то, что когда вы запрашиваете материализованное представление, вы запрашиваете таблицу , которая также может быть проиндексирована.

Кроме того, поскольку все объединения были разрешены во время обновления материализованного представления, вы платите цену объединения один раз (или так же часто, как обновляете свое материализованное представление), а не каждый раз, когда выбираете из материализованного представления. Кроме того, с включенной перезаписью запросов Oracle может оптимизировать запрос, который выбирает из источника вашего материализованного представления таким образом, что он вместо этого считывает из вашего материализованного представления. В ситуациях, когда вы создаете материализованные представления в виде сводных таблиц или копий часто выполняемых запросов, это может значительно ускорить время отклика приложения конечного пользователя. Недостаток , хотя в том , что данные , которые вы получите назад от материализованного представления только до даты , как в последний раз материализованного представление было обновлено .


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

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


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

Майк Уильямсон
источник
9
+1 за подробное объяснение, но какова обратная сторона переписывания запроса? Если перезапись запроса позволит Oracle оптимизировать запрос еще дальше, тогда мы ВСЕГДА должны разрешить переписывание запроса, нет?
Росди Касим
6
@Rosdi, он сказал это: «данные, которые вы возвращаете из материализованного представления, являются такими же актуальными, как в последний раз, когда материализованное представление обновлялось»
Джеффри Кемп
49

Представление использует запрос для извлечения данных из базовых таблиц.

Материализованное представление - это таблица на диске, содержащая набор результатов запроса.

Материализованные представления в основном используются для повышения производительности приложений, когда невозможно или нежелательно использовать стандартное представление с примененными к нему индексами. Материализованные представления могут регулярно обновляться либо с помощью триггеров, либо с помощью ON COMMIT REFRESHопции. Это требует нескольких дополнительных разрешений, но ничего сложного. ON COMMIT REFRESHбыл на месте, по крайней мере, с Oracle 10.

Иеремия Пешка
источник
Существует опция «
ОБНОВИТЬ В СООТВЕТСТВИИ
Спасибо! Я обновлю ответ. Знаете ли вы, когда эта функциональность была добавлена ​​в Oracle?
Иеремия Пешка
20

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

user12786
источник
В чем смысл DISK на основе? Значит ли это, что таблица не является частью DISK? Хранится ли он в файле и доступ к DISK быстрее, чем доступ к файлу ....?
Канагавелу Сугамар
18

Материализованное представление - таблица на диске, содержащая набор результатов запроса

Нематериализованное представление - запрос, извлекающий данные из базовой таблицы.

fn27
источник
7

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

Материализованные представления: физически хранит данные и периодически обновляется. Опрашивая MV, он выдает данные из MV.

smshafiqulislam
источник
2

Добавление к довольно подробному ответу Майка Макаллистера ...

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

Когда вы создадите материализованное представление, вы обнаружите, что Oracle создает как mview, так и в виде таблицы с одинаковым именем , что может привести к путанице.

Рагу S
источник
Таблицы, которые поддерживают материализованное представление, не имеют того же имени, что и представление.
Джеффри Кемп
@JeffreyKemp, ты уверен? Принятый ответ здесь stackoverflow.com/a/33552513 утверждает обратное. Хотя да, в 2010 году все могло быть иначе, когда вы прокомментировали ...
leqid
Мой комментарий выше должен был быть на более старой версии (вероятно, 9i). Вы правы, MV получают таблицу с тем же именем, по крайней мере, в современных версиях.
Джеффри Кемп
1

Материализованные представления - это логическое представление данных, управляемое запросом select, но результат запроса будет сохранен в таблице или на диске, а также определение запроса также сохранится в базе данных.

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

Другое отличие состоит в том, что в случае просмотра мы всегда получаем самые последние данные, но в случае материализованного представления нам необходимо обновить представление для получения последних данных. В случае Материализованного представления нам нужен дополнительный триггер или некоторый автоматический метод, чтобы мы могли обновлять MV, это не требуется для представлений в базе данных.

Дирендра Гаутам
источник