Более быстрая загрузка данных из представления или таблицы? - PullRequest
4 голосов
/ 15 марта 2012

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

Ответы [ 3 ]

6 голосов
/ 15 марта 2012

Стандартное представление, оно не должно иметь никакого значения, поскольку внутренний SQL просто расширяется в запрос.Обратите внимание, что то же самое относится к встроенным табличным пользовательским функциям (представьте «параметризованное представление»).

Однако если вы сделаете это индексированное представление ,Вы могли видеть улучшение производительности.

3 голосов
/ 15 марта 2012

Просто помните, что представление - это не что иное, как оператор выбора (индексированные представления отличаются). Если у вас есть:

SELECT * FROM TABLE

И это в процедуре, если вы поместили то же самое в представление, а затем сделали:

SELECT * FROM VIEW

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

Например, если вы создаете представление, которое обращается к 6 таблицам, а затем пишете запрос, который требует только извлечения данных из 3 из этих таблиц, вы можете воспользоваться процессом, называемым упрощением, который происходит в процессе оптимизации, и вы Увидим план, который ссылается только на 3 таблицы. Тем не менее, вы не можете. Если нет, то запрос, который вы бы написали для 3 таблиц, обычно будет выполняться быстрее, чем план для представления, которое обращается к более чем 3 таблицам.

Если вы начнете вкладывать представления, имея представления, которые вызывают представления или присоединяются к представлениям, то вы можете столкнуться с очень серьезным снижением производительности.

В общем, если вы работаете с хранимыми процедурами, я бы посоветовал вам просто написать свои запросы непосредственно к таблицам. Это никак не повлияет на производительность и поможет избежать проблем с вложенными представлениями и упрощением плана.

0 голосов
/ 15 марта 2012

просто дополняет ответ @AdaTheDev:

the same applies with table-valued user defined functions

это верно для встроенных табличных функций, но не на 100% верно для многозначной табличной функции.Функция второго типа будет использовать гораздо больше ресурсов (памяти), чем первая

Что касается представления индекса, оно может помочь, но имейте в виду, что это может значительно увеличить ваше пространство хранения

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