У меня есть 2 таблицы фактов и клиент, с 422 000 и 350 000 строк.
При выполнении этого запроса используется соединение по хэшу:
SELECT SUM(sales), [state], County
FROM pp.Facts f
INNER JOIN pp.Customer c ON (c.customerKey = f.customerKey)
WHERE c.County IN (N'Nassau', N'Westchester', N'Erie', N'Orange', N'Union',
N'Santa Clara', N'San Diego', N'Essex', N'Morris',
N'Dallas', N'Allegheny', N'Bucks')
GROUP BY [state], County
И оно прекрасно работает.
Когда выполняется запрос (тот же, но с большим количеством элементов в фильтре), объединение изменяется на «Вложенные циклы» и никогда не возвращается (очевидно)
SELECT SUM(sales), [state], County
FROM pp.Facts f
INNER JOIN pp.Customer c ON (c.customerKey = f.customerKey)
WHERE c.County IN (N'Nassau', N'Westchester', N'Erie', N'Orange', N'Union',
N'Santa Clara', N'San Diego', N'Essex', N'Morris',
N'Dallas', N'Allegheny', N'Bucks', N'New York',
N'Bergen', N'Montgomery', N'Harris', N'Delaware', N'San
Francisco', N'Suffolk', N'Travis', N'Middlesex',
N'Bexar', N'Tarrant', N'Los Angeles', N'Philadelphia')
GROUP BY [state], County
Почему метод объединения изменился?
В столбцах customerKey определены FK, а в customer.customerKey - PK (без дополнительных индексов)