Производительность представления SQL Server

#view #sql-server-2008-r2

#Вид #sql-server-2008-r2

Вопрос:

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

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

Ответ №1:

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

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

Комментарии:

1. Хорошая статья, именно то, что я искал, спасибо. Как вы могли догадаться, учитывая, что я задаю этот вопрос в первую очередь, отношения FK в этой БД практически не существуют. Теперь я понимаю, почему у оптимизатора практически нет шансов помочь мне в этом сценарии, и мой план выполнения предполагает то же самое.

Ответ №2:

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

Ответ №3:

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

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