У меня есть запрос, который использует CTE для определения отделов персонала.
CTE выливается в базу данных tempdb, когда оптимизатор запросов выбирает соединение с хэш-соответствием.
- В подобных случаях лучше использовать временную таблицу вместо CTE?
- Стоит ли в SQL пытаться обработать CTE в памяти, но затем приходится использовать базу данных tempdb, которую можно уменьшить, сознательно указав ей использовать базу данных tempdb?
Если это полезно,мой код выглядит так:
;WITH cte_Staff_Departments
AS (
SELECT DISTINCT
[stf].[contact_id]
, CASE
WHEN [stf].[department] NOT IN('HR', 'SALES', 'IT')
THEN [dpt].[department]
ELSE [stf].[department]
END AS [Department]
FROM [dbo].[staff] AS [stf]
LEFT OUTER JOIN [dbo].[departments] AS [dpt] ON [stf].[contact_id] = [dpt].[contact_id]
WHERE ([stf].[ownership_group] in ('COR','SLE')
OR [dpt].[ownership_group] in ('COR','SLE')
)
select contact_id, department from cte_Staff_Departments
Спасибо, LS23