В SQL Server 2014 мы смогли решить нашу проблему, вставив данные функции табличного значения в временную таблицу, а затем выполнив соединение с ней. Вместо того, чтобы делать соединение непосредственно с функцией табличного значения.
Это улучшило наше время выполнения с 2 минут до 4 секунд.
Вот пример, который работал для нашей команды:
- ЗАМЕДЛЕННЫЙ ЗАПРОС (2 мин):
DECLARE @id INT = 1;
SELECT *
FROM [data].[someTable] T
INNER JOIN [data].[tableValueFunction](@id) TVF ON TVF.id = T.id;
- БЫСТРЫЙ ЗАПРОС (4 сек.):
DECLARE @id INT = 1;
SELECT *
INTO #tableValueFunction
FROM [data].[tableValueFunction](@id) TVF
SELECT *
FROM [data].[someTable] T
INNER JOIN #tableValueFunction TVF ON TVF.id = T.id;