200 объединений на самом деле очень распространено, если вы попадаете в ловушку EAV . Если у вас есть одна сущность с 200 столбцами, для вас есть 200 объединений!
Конечно, у SQL Server нет проблем с 200 объединениями, но вполне возможно, что он неправильно рассчитывает объем необходимой памяти. Это особенно вероятно для hash joins
, которые обменивают память на лучшую производительность. Таким образом, первым шагом будет замена всех объединений циклами, например inner loop join
. Соединение цикла требует очень мало памяти.
Если это не сработает, посмотрите на план выполнения. Реальный план, вероятно, не сможет преодолеть ошибку памяти, но вы можете увидеть примерный план выполнения:
SET SHOWPLAN_ALL ON
Из документации:
Когда SET SHOWPLAN_ALL включен, SQL
Сервер возвращает информацию об исполнении
за каждое утверждение без выполнения
это, и операторы Transact-SQL
не выполнен
Это может дать представление о том, что SQL планирует делать.