Вложенные представления Sql Server 2008 - PullRequest
14 голосов
/ 06 мая 2011

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

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

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

Ответы [ 2 ]

12 голосов
/ 06 мая 2011

Я бы избежал этого любой ценой.Сначала, когда вы вкладываете представления, они не могут быть проиндексированы.Далее, так как они должны полностью материализовать базовые представления, чтобы перейти к следующему слою.Таким образом, вы можете получить несколько миллионов записей, чтобы получить конечный результат из 5 записей.Мы почти потеряли многомиллионный клиент, потому что производительность была настолько плачевной, когда наши разработчики делали это с одной базой данных (а не с базой данных, которую я использовал для разработки).

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

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

5 голосов
/ 06 мая 2011

Другие варианты для рассмотрения: Индексированные представления - Может быть опасно для использования, если не используется правильно, но прирост производительности может быть потрясающим.

Analytics -такие как наборы группировки

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

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

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

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