2016-03-30 4 views
1

Я понимаю, что представление представляет собой окно к базовой таблице или набору таблиц в Oracle. Например, если у меня есть представление, которое создается путем объединения нескольких таблиц, будет ли представление выполнять фактические операции соединения при выборе данных из представления? Является ли представление более эффективным, чем объединение нескольких таблиц для извлечения данных или же оно относится к производительности?Oracle View vs объединение таблиц в Oracle

+2

Посмотрите на план выполнения, чтобы оба знали: но я считаю, что представление будет медленнее, если применяются критерии фильтрации. (предполагая, что мы не говорим о материализованном представлении). Я думаю, что представление должно материализоваться первым, а затем применяемые пределы, где, как если бы они были непосредственно выбраны из таблиц, движок может оптимизировать соединения и отфильтровывать данные на основе критики и индексов; которые вид *** не может сделать. – xQbert

+0

Спасибо xQbert, да, я говорил о мнениях. Я предполагаю материализованные представления с использованием дополнительного пространства для хранения. –

+0

Спасибо xQbert, Что означает «материализоваться первым»? –

ответ

1

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

У Oracle есть преобразования оптимизатора, которые могут комбинировать представления с внешним запросом; предикат, простое и сложное слияние и т. д. Думайте о представлениях больше как текстовый макрос, который строит большой запрос, а не функцию, возвращающую строки.

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

select * 
from view_returns_millions_of_rows 
where primary_key_value = 1; 
Смежные вопросы