Преимущества представлений в хранимых процедурах

Я пробовал искать разными способами, но не нашел однозначного ответа на свой вопрос. На этот вопрос почти отвечает мой запрос, но не совсем.

Помимо очевидных различий в удобочитаемости, есть ли какие-либо преимущества в использовании представления в хранимой процедуре:

SELECT 
    * 
FROM 
    view1 
WHERE 
    view1.fdate > @start AND 
    view1.fdate <= @end 

... за использование списка связанных таблиц?

SELECT 
    * 
FROM 
    table1 
    INNER JOIN 
    table2 
        ON  table1.pid = table2.fid 
    INNER JOIN 
    table3 
        ON  table1.pid = table3.fid 
WHERE 
    table1.fdate > @start AND 
    table1.fdate <= @end 

person Paul    schedule 21.04.2017    source источник
comment
Что ж, некоторые представления могут быть проиндексированы, поэтому в некоторых случаях индексированные представления могут повысить производительность. Кроме того, я сомневаюсь, что есть какая-то реальная разница. Тем не менее, я думаю, что эксперты DBA, вероятно, могут предложить лучшие ответы, поэтому я просто оставлю это в качестве комментария.   -  person Zohar Peled    schedule 21.04.2017
comment
Спасибо за ваш вклад, @ZoharPeled. Я заметил это, но разве индексы на уровне таблицы не были бы столь же полезны (если таблица в первую очередь проиндексирована правильно)?   -  person Paul    schedule 21.04.2017
comment
Индексированные представления @Paul могут создавать индексы, которые не могут быть сопоставлены индексами таблиц, например. индексированное представление может содержать агрегаты.   -  person Remus Rusanu    schedule 21.04.2017


Ответы (2)


Не только ваше приложение и вы.

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

Вы, администратор базы данных, создаете ВИДЫ. Они денормализуют данные в простые для обработки отношения для деловых людей, для многих приложений и для отчетов. Вы предоставляете разрешение выбора для представлений без предоставления доступа к базовой таблице, чтобы скрыть конфиденциальные частные поля. А иногда вы пишете представления, потому что устали от звонков в полночь из-за того, что база данных «не работает», потому что Джонни из бухгалтерии выполняет декартово соединение.

person Remus Rusanu    schedule 21.04.2017
comment
Этот Джонни всего лишь беда ... :-) - person Zohar Peled; 21.04.2017
comment
Честно говоря, я об этом не думал (в конце концов, я эгоистичный разработчик, а не настоящий администратор базы данных!). Это полезная информация - спасибо. - person Paul; 25.04.2017

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

person Mikhail Lobanov    schedule 21.04.2017