Кэширование данных первого запроса, вероятно, НЕ приведет к повышению производительности.Когда SQL Server получает запрос, он разбивает его на простые шаги, выбирает правильные индексы и операторы и извлекает данные, используя эти индексы.Сохраняя данные первого запроса в табличной переменной или во временной таблице, вы не позволяете SQL Server использовать какие-либо индексы в таблице Employees.
Если вы переписываете свой запрос в его эквивалент с помощью JOIN, легче увидеть, что происходит
SELECT c.*
FROM CostCenters c INNER JOIN Employees e on c.EmployeeId=e.EmployeeId
WHERE e.BossId=1
Когда SQL Server увидит этот запрос, он проверит статистику таблиц.Если BossId является высокоселективным индексированным столбцом, он может сначала попытаться отфильтровать это.В противном случае он будет использовать любые индексы в столбцах EmployeeId для ограничения строк из обеих таблиц до минимума, а затем BossId, чтобы найти правильные строки и вернуть их.
Операции фильтрации по индексам выполняются довольно быстро, поскольку индексы содержат только подмножество данных строки, их проще кэшировать в памяти и имеют физическую структуру, которая позволяет осуществлять быстрый поиск.
Вы действительно не должны пытаться угадать оптимизатор запросов SQL Server, прежде чем столкнетесь с реальной проблемой производительности.В большинстве случаев вы не сможете выбрать лучший план выполнения, что приведет к снижению производительности