Производительность SQL Server VIEW - PullRequest
6 голосов
/ 25 октября 2011

Если у меня есть VIEW с кучей ВНУТРЕННИХ СОЕДИНЕНИЙ, но я запрашиваю этот VIEW SELECT, выбирая только столбцы из основной таблицы, будет ли SQL Server игнорировать ненужные объединения в VIEW во время выполнения или эти объединения все еще должны произойти по какой-то причине?

Если это не так, то это на SQL Server 2008 R2. В любом случае я знаю, что это уже не очень удачное решение, но я пытаюсь найти меньшее из двух зол.

Ответы [ 3 ]

3 голосов
/ 25 октября 2011

Это может игнорировать объединения, если они фактически не изменяют семантику. Одним из примеров этого может быть, если у вас есть ограничение доверенного внешнего ключа между таблицами, и вы выбираете только столбцы из ссылочной таблицы ( См. Пример 9 в этой статье ).

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

1 голос
/ 25 октября 2011

Даже если оптимизатор игнорирует ненужные объединения, вам просто нужно создать другое представление для вашего конкретного случая.Использование и злоупотребление мнениями (например, в этом случае) могут выйти из-под контроля и привести к запутыванию, путанице и очень значительным проблемам с производительностью.

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

1 голос
/ 25 октября 2011

Если вы не извлекаете поля из этих таблиц, может быть быстрее использовать предложение EXISTS - это также предотвратит дубликаты из таблицы JOIN ed, что приведет к дублированию в ваших результатах.

...