Являются ли материализованные представления виртуальными или реальными таблицами с реальными данными? - PullRequest
0 голосов
/ 05 июля 2019

Когда материализованные представления создаются в Oracle, хранят ли они индексы или хранят фактические табличные значения?

Я спрашиваю это как создание индекса для таблицы и использование представлений для этой таблицы и использование материализованных представлений (созданос refresh complete start with (sysdate) next (sysdate+1) with rowid as) для неиндексированной таблицы дает аналогичную производительность.

Где, как и следовало ожидать, материализованные представления будут намного быстрее.

Обновление

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

Ответы [ 2 ]

4 голосов
/ 05 июля 2019

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

Что касается загадки вашего выступления:

Когда вы говорите "на неиндексированном столе" Вы буквально имеете в виду одну таблицу ? Если это так, то мы не ожидаем никакой разницы во времени для запроса представления, материализованного представления или фактических данных: все они выполняют полное сканирование таблицы на одном и том же объеме данных.

Рассмотрим случай, когда представления ожидают select * from <table> where <condition>.

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

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

Подводя итог: единственная универсальная настраивающая эвристика: требуется меньше времени, чтобы выполнять меньше работы . Помимо этого невозможно обобщить. Мы не можем обсуждать какое-то расплывчатое «рассмотрим случай, когда представления имеют select * from <table> where <condition>.». Все дело в специфике.

2 голосов
/ 05 июля 2019

По сути, материализованное представление - это просто таблица со связанным запросом для ее заполнения.

Учитывая статические данные, можно было бы ожидать, что производительность SELECT * из материализованного представления (без предложения WHERE) будет, по крайней мере, такой же быстрой, как и выполнение запроса, лежащего в основе материализованного представления, независимо от индексации.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...