Оптимизировать запрос без использования временных таблиц и оптимизировать взаимодействие с пользователем - PullRequest
0 голосов
/ 10 мая 2019

Положение:

Я новичок в этом, но только что понял, как создавать табличные функции и хранимые процедуры. Я создал несколько для клиента. Я сталкиваюсь с проблемой, когда я создал табличную функцию с параметром date. В самом запросе есть несколько CTE. Когда функция выполняется, запрос загружается навсегда, и в конце концов я должен остановить его (см. Пример ниже).

Итак, я разделил CTE на 2 основные temp таблицы и запрос, который загружает временную таблицу. Каким-то образом это работает лучше (см. Пример ниже).

Цель:

Какие есть варианты, когда пользователю не нужно вручную запускать временные таблицы. Кроме того, пользователю должно быть легко выполнять запрос, например, хранимые процедуры или функции.

Пример:

У меня было нечто, похожее на то, что все еще продолжалось через час.

CREATE FUNCTION dbo.example
    (@StartDate AS DATE)
RETURNS TABLE 
AS
   RETURN
       WITH CTE AS 
       (........), 
       CTE2 AS (.....) 
       SELECT *  
       FROM CTE2 ... 
       JOINS...

Итак, я создал временные таблицы, которые работали очень хорошо:

DECLARE @StartDate AS DATE = ....
SELECT * INTO #cte FROM (query) temp1

DECLARE @StartDate AS DATE = ....
SELECT * INTO #cte2 FROM (query) temp1

SELECT * 
FROM #cte2.... 
JOIN ....

Какие у меня есть альтернативы?

Спасибо!

...