Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Запрос: Итого по убыванию + условие.  [new]
LightN
Member

Откуда:
Сообщений: 183
Добрый день.
Вот есть запрос, в котором dbo.Years_qu - таблица с bit - полями (данные за определенный Год: нужен/не нужен Год, или включить/выключить (1 запись-строка)), в другой таблице содержатся итоговые значения закупок каждого конкретного Customer_ID за определенный год (+- 9000 записей).
ALTER VIEW [dbo].[Customers_Sum_Y]
AS
  SELECT cs.[Customer_ID],cs.[OrganizationName],cs.[ManagerID],
      IIF( y.[2019] = 0 ,0, cs.S_2019) 
	+ IIF( y.[2018] = 0 ,0, cs.S_2018) 
	+ IIF( y.[2017] = 0 ,0, cs.S_2017)
	+ IIF( y.[2016] = 0 ,0, cs.S_2016) 
	+ IIF( y.[2015] = 0 ,0, cs.S_2015) 
	+ IIF( y.[2014] = 0 ,0, cs.S_2014) AS T_Year
, IIF( y.[2019] = 0 ,0, cs.S_2019) AS T_2019
, IIF( y.[2018] = 0 ,0, cs.S_2018) AS T_2018 
, IIF( y.[2017] = 0 ,0, cs.S_2017) AS T_2017
, IIF( y.[2016] = 0 ,0, cs.S_2016) AS T_2016
, IIF( y.[2015] = 0 ,0, cs.S_2015) AS T_2015
, IIF( y.[2014] = 0 ,0, cs.S_2014) AS T_2014
 FROM dbo.Years_qu AS y (nolock) 
 RIGHT OUTER JOIN dbo.[Customers_Sum] AS cs (nolock) ON y.[ManagerID] = cs.[ManagerID]
GO
Предположим мы хотим не учитывать данные за 14,15 года. Для этого на клиенте в определенной форме указываем:
   update  dbo.Years_qu set [2019] = 1, [2018] = 1, [2017] = 1, [2016] = 1, [2015] = 0, [2014] = 0
    where ManagerID=@MyManagerID
Далее нам нужны, например, такие данные: 0-е приходы за 19 и 18 год и Не-0-е за 16,17.
Т.е. клиенты, которых мы потерями за прошлый год. А ещё нужна сортировка по убыванию итоговых значений закупок каждого конкретного Customer_ID:
Select * from [dbo].[Customers_Sum_Y]
where  
 T_2019=0 and
 T_2018=0 and 
 T_2017>0 and
 T_2016>0 
order by T_Year DESC
Последний запрос виснет на сервере на 100-180 секунд и более.
Причем условие where T_2019=0 and T_2018=0 выполняется пулей.
Как только добавляю T_2017>0 and T_2016>0 включаются тормоза.
Пробовал IIF заменить на Case, пробовал умножать Год на Итого и потом суммировать, пробовал <>0, всё равно тормоза ...
Понимаю, что данные не кэшируются и нужно что-то изменить, ну чтобы SQL не вис. Как быть?
4 фев 19, 14:23    [21801300]     Ответить | Цитировать Сообщить модератору
 Re: Запрос: Итого по убыванию + условие.  [new]
msLex
Member

Откуда:
Сообщений: 5748
LightN
Последний запрос виснет на сервере на 100-180 секунд и более.
Причем условие where T_2019=0 and T_2018=0 выполняется пулей.
Как только добавляю T_2017>0 and T_2016>0 включаются тормоза.



Зависает = долго работает но в итоге выполняется
или
Зависает = долго работает и вы его отменяете
?

Если первое, смотрите планы запросов

Если второе, попробуйте посмотреть план запроса, если построение плана так же "зависает", то у вас строится/обновляется статистика по полям T_2017, T_2016
4 фев 19, 14:31    [21801312]     Ответить | Цитировать Сообщить модератору
 Re: Запрос: Итого по убыванию + условие.  [new]
LightN
Member

Откуда:
Сообщений: 183
msLex,
В итоге запрос выполняется, но очень-очень медленно. В плане тоже всё ОК. Похоже наступил на какие-то грабли.
Возможно расчёт суммы T_Year как-то спотыкается на условии T_2017>0 and T_2016>0 и они мешают друг другу ...
4 фев 19, 14:50    [21801336]     Ответить | Цитировать Сообщить модератору
 Re: Запрос: Итого по убыванию + условие.  [new]
Oleg_SQL
Member

Откуда: Khabarovsk
Сообщений: 18
а не LEFT JOIN нужен?
8 фев 19, 13:16    [21804285]     Ответить | Цитировать Сообщить модератору
 Re: Запрос: Итого по убыванию + условие.  [new]
aleks222
Member

Откуда:
Сообщений: 449
LightN
Пробовал IIF заменить на Case, пробовал умножать Год на Итого и потом суммировать, пробовал <>0, всё равно тормоза ...
Понимаю, что данные не кэшируются и нужно что-то изменить, ну чтобы SQL не вис. Как быть?


Вы меня пугаете.
Используете фильтр по вычисляемому полю и ишо жалуетесь на жисть.
Самом собой - сканирование таблицы и быстро не будет никогда.

ЗЫ. Про "архитектуру" я лучше промолчу. Но "быстро" = полная перестройка вашего сарая.
9 фев 19, 10:03    [21805089]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить