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

Откуда:
Сообщений: 1197
Привет.

Не могу понять, почему медленно работает запрос.
стоит убрать
автор
sum(ss.avgitemsqty) as avgitemsqty
запрос работает меньше секунды.
вставляю - работает больше 3 минут.
делала такую хитрость. вместо sum(ss.avgitemsqty) as avgitemsqty вставлял константу - 5. всё равно работает 3 минуты.
убираю последний left join и выполняю его отдельно после cte, всё работает мгновенно.
Что такое может быть?


DECLARE @Dates TABLE(
											WeekMinDay CHAR(8), 											
											WeekMaxDay CHAR(8), 											
											Last4WeeksMinDay CHAR(8), 
											Last4WeeksMaxDay CHAR(8),
											Week CHAR(6) 
										  )
INSERT @Dates(WeekMinDay, WeekMaxDay, Last4WeeksMinDay, Last4WeeksMaxDay, Week)
select       '20130506', '20130512', '20130408', '20130505', '201320'
union select '20130513', '20130519', '20130415', '20130512', '201321'
union select '20130520', '20130526', '20130422', '20130519', '201322'
union select '20130527', '20130602', '20130429', '20130526', '201323'
union select '20130603', '20130609', '20130506', '20130602', '201324'
union select '20130610', '20130616', '20130513', '20130609', '201325'
union select '20130617', '20130623', '20130520', '20130616', '201326'
union select '20130624', '20130630', '20130527', '20130623', '201327'

--структура таблица в которой хранятся продажи
declare @sales table(itemsqty int, model  varchar(20), category varchar(20), week char(3), saledate char(8));

with cte as 
(
  select max(s.itemsqty) as maxitemsqty, s.category, s.week, max(s.saledate) as lastSaleDate
  from @sales s 
    join @Dates d 
	 on s.saledate between d.WeekMinDay and d.WeekMaxDay 
	group by s.category, s.week
)

select c.maxitemsqty, c.week, c.category,
   sum(ss.avgitemsqty) as avgitemsqty
  from cte c
  left join 
   (
      select max(itemsqty) as avgitemsqty, category, s.week, max(saledate) as SaleDate
	  from @sales s 
		join @Dates d 
		 on s.saledate between d.Last4WeeksMinDay and d.Last4WeeksMaxDay 
		group by category, s.week
   ) ss
   on c.category = ss.category and c.week = ss.week
group by c.week, c.category, c.maxitemsqty
25 июн 13, 16:59    [14481731]     Ответить | Цитировать Сообщить модератору
 Re: Почему медленнно работает запрос?  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
ну так если убрать sum(ss.avgitemsqty) as avgitemsqty, то левый джойн и не будет делаться - просто незачем.
можно попробовать, то что в левом джойне в таблицу сначала вставить, а потом уже таблицу джойнить
25 июн 13, 17:16    [14481837]     Ответить | Цитировать Сообщить модератору
 Re: Почему медленнно работает запрос?  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
Проблемы с производительностью запросов не решают на табличных переменных, на которых ни индексов не построишь и по которым статистика "не строится".

автор
Что такое может быть?


Анализируйте планы выполнения реальных запросов.
25 июн 13, 17:17    [14481845]     Ответить | Цитировать Сообщить модератору
 Re: Почему медленнно работает запрос?  [new]
relief
Member

Откуда:
Сообщений: 1197
Мистер Хенки
ну так если убрать sum(ss.avgitemsqty) as avgitemsqty, то левый джойн и не будет делаться - просто незачем.
можно попробовать, то что в левом джойне в таблицу сначала вставить, а потом уже таблицу джойнить


слушайте. а помогло. конечно 4 секунды - не идеал, но не 3 минуты
25 июн 13, 17:32    [14481974]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить