Если CTE выливается в tempDB, будет ли временная таблица лучшим вариантом? - PullRequest
0 голосов
/ 10 октября 2018

У меня есть запрос, который использует 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

1 Ответ

0 голосов
/ 10 октября 2018

@ lindsayScott23, я только предлагаю.Пожалуйста, не отмечайте меня.Я на самом деле покончу с CTE и напишу запрос с помощью подзапроса.как это:

SELECT contact_id, department 
FROM (
    SELECT 
        [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 JOIN [dbo].[departments] AS [dpt] 
            ON [stf].[contact_id] = [dpt].[contact_id]
            AND (
                [stf].[ownership_group] in ('COR','SLE')
                OR 
                [dpt].[ownership_group] in ('COR','SLE')
            )
) CSD
GROUP BY
    contact_id, department
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...