TSQL - как оптимизатор обрабатывает объединения с неиспользуемыми таблицами - PullRequest
2 голосов
/ 10 апреля 2019

TSQL - как оптимизатор обрабатывает объединения с неиспользуемыми таблицами

SELECT table1.col1, table2.col1, table2.col2  -- etc.
FROM dbo.table1
LEFT JOIN dbo.table2
on (table1.id = table2.id)
LEFT JOIN dbo.table3
on (table1.id = table3.id) 

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

Вопрос: Может ли оптимизатор запросов TSQL определить, что соединение с таблицей 3 не требуется? Если это так, может ли он пропустить другие оптимизации для более сложных запросов, если table3 не был удален вручную из запроса?

Я использую SSMS 14.017 с базовой базой данных SQL select @@ version = Microsoft SQL Server 2014 (SP3)

1 Ответ

3 голосов
/ 10 апреля 2019

Да, оптимизатор запросов может пропустить table3, потому что на него нет ссылок в списке SELECT и условие объединения равно LEFT OUTER JOIN, поэтому фильтрация отсутствует.


Похожие: 10 Классные оптимизации SQL, которые не зависят от модели затрат. Автор: Lukas Eder :

  • Необходимый доступ к таблице
  • ПРИСОЕДИНЯЙТЕСЬ к ликвидации

Удаление JOIN: существенная функция оптимизатора для расширенного использования SQL

...