;with DEL_TYPE as (
SELECT DISTINCT( coalesce( (CASE WHEN delivery_type = 'COURIER' THEN 1 ELSE 0 END),-1)) as delivery_type_int
FROM td.orders as ord WITH (NOLOCK)
WHERE (ord.date_create >= @DStart)and(date_create <= @DEnd)
),
REG_DEL as ( -- Список всех уникальных значений регионов
SELECT DISTINCT(ord.region_delivery_id) as region_delivery_id
FROM td.orders as ord WITH (NOLOCK)
WHERE (ord.date_create >= @DStart)and(date_create <= @DEnd)
),
WEBSHOP as ( -- Список всех уникальных значений вебшопов
SELECT DISTINCT(ord.webshop_id) as webshop_id
FROM td.orders as ord WITH (NOLOCK)
WHERE (ord.date_create >= @DStart)and(date_create <= @DEnd)
),
DAT as ( -- Список всех уникальных значений дат в выбранном периоде
SELECT DISTINCT(cast(ord.date_create as date)) as report_date
FROM td.orders as ord WITH (NOLOCK)
WHERE (ord.date_create >= @DStart)and(date_create <= @DEnd)
),
CD as (
SELECT TOP 100 PERCENT * --- Берем все возможные сочетания всех вышепосчитанных параметров
FROM DAT, WEBSHOP, REG_DEL, DEL_TYPE
ORDER BY 1
),
Сделайте через темповые таблицы #tmp,если объем темповых данный большой, делайте primary key где это нужно. После того как получите данные своим запросом, откройте план выполнения. Когда вы джойните несколько cte друг с другом план запроса выходит просто ужасный
Для таких объёмов не стоит использовать cte, сделайте тестовые таблицы и на все ключевые поля primary key, думаю разница будет огромная в быстродействии
Что "вот"? В Киеве дядька? ;) Ещё раз, Вы утверждали: > Когда вы джойните несколько cte друг с другом план запроса выходит просто ужасный Так вот, это не так. Мне любопытно, как (и какие) "преимущества индексов" для Вас являются основанием для таких убеждений?
Наверно я не правильно выразился сказав что "план выходит ужасный". Я имел в виду влияние на быстродействие. Если вы после выборки в CTE большого объёма данных начинаете проводить какие-то манипуляции с данными, объединение, изменение, то на таких таблицах лучше иметь индексы. Почему лучше иметь индексы, очевидно.
Давайте, продемонстрируйте. Вы обратили внимание на условия в моём утверждении, или проигнорировали их? ;)
Ну да, в ограниченных условиях "всегда и хуже", а в остальных - нет.
Обсуждают сегодня