Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / План выполнения запроса / 19 сообщений из 19, страница 1 из 1
11.07.2012, 17:02
    #37875284
danton
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
План выполнения запроса
Подскажите, можно сделать какой то вывод по поводу увлечения времени выполнения запроса глядя, на план выполнения.

Приводить пример всех таблиц будет очень громоздко....
...
Рейтинг: 0 / 0
11.07.2012, 22:09
    #37875593
step_ks
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
План выполнения запроса
актуальный план был бы полезнее. + сам запрос в нормальном виде.
...
Рейтинг: 0 / 0
12.07.2012, 00:53
    #37875687
Mnior
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
План выполнения запроса
Routes. 7z

<Лять>
Кто RAR, кто 7zip. Ёпрст. Ради 3х бит нужно так сильно выёживаться.
Для тупых: Zip работает на любой OS из каробки!!!111
Тут не может быть никаких НО.
</Лять>

Я конечно понимаю что он (7zip) Open Source и поставить легко, а на линухе ещё проще, и то что делал самый классный (практически единственно классный) чувак, но стандарт есть стандарт и уважение к собеседникам, тем более у кого спрашиваешь.

Спасибо за понимание.
...
Рейтинг: 0 / 0
12.07.2012, 01:41
    #37875716
Mind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
План выполнения запроса
dantonПодскажите, можно сделать какой то вывод по поводу увлечения времени выполнения запроса глядя, на план выполнения.

Приводить пример всех таблиц будет очень громоздко....Для начала обновите статистику на вашей многомилионной таблице.
...
Рейтинг: 0 / 0
12.07.2012, 10:40
    #37876065
Mnior
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
План выполнения запроса
step_ksсам запрос в нормальном виде.
danton
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
INSERT	saleit_db_Danone.dbo.tbl_RouteSalesSum	(  RouteID,   PlanID,         RouteName,    [Month],    [Year],  KodeMonth,SalesVolume)
SELECT						rr.RouteID,pd.PlanID,c.cus_SalesRouteID,t.theMonth ,t.TheYear ,t.KodeMonth
	,CASE	WHEN pr.[Type] = 0
		THEN Sum(s.Caf) 
		ELSE Sum(s.Kg)
		END		AS KG 
FROM	          Mart.dbo.SalesD s
	LEFT JOIN Mart.dbo.CustomersD			c  ON c.cus_CustomerID	= s.CustomerID
	LEFT JOIN Mart.dbo.[Time]			t  ON t.TheDate		= s.TheDate
	LEFT JOIN Mart.dbo.tbl_transcode		tt ON tt.ProductIDOld	= s.ProductID
	LEFT JOIN saleit_db_Danone.dbo.tbl_PlanDetails	pd ON pd.ProductID	= tt.ProductIDNew
	LEFT JOIN saleit_db_Danone.dbo.RoutesN		rr ON rr.RouteName	= c.cus_SalesRouteID
	LEFT JOIN saleit_db_Danone.dbo.tbl_Plans	ps ON ps.PlanID		= pd.PlanID
	LEFT JOIN saleit_db_Danone.dbo.tbl_PlanRoutes	pr ON pr.PlanID		= pd.PlanID
							  AND pr.RouteID	= rr.RouteID
WHERE	    c.cus_SalesRouteID	IN (SELECT rn.RouteName FROM saleit_db_Danone.dbo.RoutesN rn WHERE rn.ActiveRoute = 1)
	AND s.TheDate		>= Convert(Char,                DateAdd(Day,1-DatePart(Day,GetDate()),GetDate())   ,112)	-- Начало текущего месяца
	AND s.TheDate		<= Convert(Char,DateAdd(Month,1,DateAdd(Day,1-DatePart(Day,GetDate()),GetDate()))-1,112)	-- Конэц  текущего месяца
	AND Left(rr.RouteID,1)	 = ps.PlanPlatform
	AND pd.PlanID		IN (
		SELECT	pp.PlanID
		FROM	saleit_db_Danone.dbo.tbl_Plans pp 
		WHERE	    pp.PlanDateEnd	<= Convert(Char,DateAdd(Month,1,DateAdd(Day,1-DatePart(Day,GetDate()),GetDate()))-1,112)	-- Конэц  текущего месяца
			AND pp.PlanDateStart	>= Convert(Char,                DateAdd(Day,1-DatePart(Day,GetDate()),GetDate())   ,112)	-- Начало текущего месяца
		)
GROUP BY rr.RouteID
	,pd.PlanID
	,c.cus_SalesRouteID
	,t.theMonth
	,t.TheYear
	,t.KodeMonth
	,pr.[Type]
...
Рейтинг: 0 / 0
12.07.2012, 10:45
    #37876078
denis2710
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
План выполнения запроса
danton,
у вас там сплошной скан таблиц,постройте нужные индексы
перепишите условия типа этого
Код: sql
1.
2.
3.
and s.TheDate>=convert(char,DATEADD(day,1-DATEPART(day,GETDATE()),GETDATE()),112)
and s.TheDate<=convert(char,DATEADD(MONTH,1,DATEADD(day,1-DATEPART(day,GETDATE()),GETDATE()))-1,112)
and left(rr.RouteID,1) = ps.PlanPlatform


махните in на exists.
...
Рейтинг: 0 / 0
12.07.2012, 10:47
    #37876086
Mnior
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
План выполнения запроса
dantonПодскажите, можно сделать какой то вывод по поводу увлечения времени выполнения запроса глядя, на план выполнения.Вывод очень не утешительный.
Нет индексов (почти никаких), нет некоторых ключей на таблах (есть nonclustered unique index на ID в куче, ужос). Практически одни сканы, что учеличивает время пропорционально данным.

Случай на грани "это не лечится".
...
Рейтинг: 0 / 0
12.07.2012, 10:57
    #37876106
danton
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
План выполнения запроса
Cпасибо всем за комменты, этим как раз и занимаюсь.

denis2710 перепишите условия типа этого
Код: sql
1.
2.
3.
and s.TheDate>=convert(char,DATEADD(day,1-DATEPART(day,GETDATE()),GETDATE()),112)
and s.TheDate<=convert(char,DATEADD(MONTH,1,DATEADD(day,1-DATEPART(day,GETDATE()),GETDATE()))-1,112)
and left(rr.RouteID,1) = ps.PlanPlatform



махните in на exists.

Вопрос уже не по теме, как exists увеличит производительность и в каком виде лучше разворачивать строки?
...
Рейтинг: 0 / 0
12.07.2012, 11:27
    #37876176
denis2710
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
План выполнения запроса
danton,
Ну для начала посмотреть по поиску как лучше работать с датами в SQL Server.Я бы например в переменные положил значения.
Код: sql
1.
left(rr.RouteID,1)

сие в вычисляемое поле положить.
dantonкак exists увеличит производительность
может и ни как
Можно исчо перестать даты в строке хранить например.(судя по convert char(30))
...
Рейтинг: 0 / 0
12.07.2012, 12:21
    #37876330
danton
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
План выполнения запроса
denis2710,

Ну я серьезно спрашивал)
Запрос не я писал, cам не знаю зачем convert делался
...
Рейтинг: 0 / 0
12.07.2012, 12:33
    #37876370
denis2710
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
План выполнения запроса
danton, "мопед не мой,я просто разместил объявление"
так я и серьезно и сказал,что может быть ни какого прироста производительности,но хуже с exists точно не будет.
Тип полей s.TheDate,pp.PlanDateEnd,pp.PlanDateStart какой?
...
Рейтинг: 0 / 0
12.07.2012, 12:34
    #37876374
Mnior
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
План выполнения запроса
dantonкак exists увеличит производительностьОчень просто - однозначностью связки для оптимизатора.
Код: sql
1.
2.
3.
AND pd.PlanID IN (SELECT pp.PlanID
-- Для оптимизатора не всегда то же самое что
AND Exists(... WHERE ... AND pp.PlanID = pd.PlanID

IN - сопоставь значение со списком (который надо собрать и ещё отсечь дубли)
Exists - найди первый попавшийся случай удовлетворяющий условию (просто найди что существует, ничего не возвращая)

Даты самое узкое место, IMXO. Остальное может и не особо селективно.
А вот ещё маленькая глупость:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
SELECT						rr.RouteID,pd.PlanID,c.cus_SalesRouteID,t.theMonth ,t.TheYear ,t.KodeMonth
	,CASE	WHEN pr.[Type] = 0
		THEN Sum(s.Caf) 
		ELSE Sum(s.Kg)
		END		AS KG 
FROM	          Mart.dbo.SalesD			s
	LEFT JOIN Mart.dbo.CustomersD			c  ON c.cus_CustomerID	= s.CustomerID
	LEFT JOIN Mart.dbo.[Time]			t  ON t.TheDate		= s.TheDate
	LEFT JOIN Mart.dbo.tbl_transcode		tt ON tt.ProductIDOld	= s.ProductID
	LEFT JOIN saleit_db_Danone.dbo.tbl_PlanDetails	pd ON pd.ProductID	= tt.ProductIDNew
	LEFT JOIN saleit_db_Danone.dbo.RoutesN		rr ON rr.RouteName	= c.cus_SalesRouteID
	LEFT JOIN saleit_db_Danone.dbo.tbl_Plans	ps ON ps.PlanID		= pd.PlanID
	LEFT JOIN saleit_db_Danone.dbo.tbl_PlanRoutes	pr ON pr.PlanID		= pd.PlanID
							  AND pr.RouteID	= rr.RouteID
WHERE	    c.cus_SalesRouteID	IN (SELECT rn.RouteName FROM saleit_db_Danone.dbo.RoutesN rn WHERE rn.ActiveRoute = 1)
	AND s.TheDate		>= Convert(Char,                DateAdd(Day,1-DatePart(Day,GetDate()),GetDate())   ,112)	-- Начало текущего месяца
	AND s.TheDate		<= Convert(Char,DateAdd(Month,1,DateAdd(Day,1-DatePart(Day,GetDate()),GetDate()))-1,112)	-- Конэц  текущего месяца
	AND Left(rr.RouteID,1)	 = ps.PlanPlatform
	AND pd.PlanID		IN (
		SELECT	pp.PlanID
		FROM	saleit_db_Danone.dbo.tbl_Plans pp 
		WHERE	    pp.PlanDateEnd	<= Convert(Char,DateAdd(Month,1,DateAdd(Day,1-DatePart(Day,GetDate()),GetDate()))-1,112)	-- Конэц  текущего месяца
			AND pp.PlanDateStart	>= Convert(Char,                DateAdd(Day,1-DatePart(Day,GetDate()),GetDate())   ,112)	-- Начало текущего месяца
		)
GROUP BY rr.RouteID
	,pd.PlanID
	,c.cus_SalesRouteID
	,t.theMonth
	,t.TheYear
	,t.KodeMonth
	,pr.[Type]

Бессмысленно ставить LEFT.

А это взрывает моск:
Код: sql
1.
c.cus_SalesRouteID IN (SELECT rn.RouteName
...
Рейтинг: 0 / 0
12.07.2012, 12:39
    #37876385
Mnior
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
План выполнения запроса
dantonЗапрос не я писал, cам не знаю зачем convert делалсяБоже.
Это безнадёжно ...
...
Рейтинг: 0 / 0
12.07.2012, 13:56
    #37876548
danton
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
План выполнения запроса
MniordantonЗапрос не я писал, cам не знаю зачем convert делалсяБоже.
Это безнадёжно ...

Вы меня неправильно поняли.
Что выполняет преобразование понятно. Не знаю, зачем писали именно так, в контексте того, что есть в базах, можно было реализовать по проще.
...
Рейтинг: 0 / 0
12.07.2012, 13:59
    #37876555
danton
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
План выполнения запроса
denis2710Тип полей s.TheDate,pp.PlanDateEnd,pp.PlanDateStart какой?

Код: sql
1.
Datetime
...
Рейтинг: 0 / 0
12.07.2012, 14:02
    #37876558
danton
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
План выполнения запроса
MniorА это взрывает моск:
Код: sql
1.
c.cus_SalesRouteID IN (SELECT rn.RouteName


Видимо так разработали...
...
Рейтинг: 0 / 0
12.07.2012, 14:36
    #37876640
denis2710
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
План выполнения запроса
dantondenis2710Тип полей s.TheDate,pp.PlanDateEnd,pp.PlanDateStart какой?

Код: sql
1.
Datetime


так уберите конверты.
Какой скрытый смысл работать с датами,потом преобразовывать в строку,а потом сравнивать с датой???
Mnior А это взрывает моск:
c.cus_SalesRouteID IN (SELECT rn.RouteName

Это что б враги не догадались!!!Встречал м-цать раз
...
Рейтинг: 0 / 0
12.07.2012, 14:38
    #37876646
Shakill
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
План выполнения запроса
denis2710так уберите конверты.
Какой скрытый смысл работать с датами,потом преобразовывать в строку,а потом сравнивать с датой???
это такой неочевидный способ обнуления времени, которое возникает из getdate()
...
Рейтинг: 0 / 0
12.07.2012, 15:03
    #37876708
denis2710
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
План выполнения запроса
Shakilldenis2710так уберите конверты.
Какой скрытый смысл работать с датами,потом преобразовывать в строку,а потом сравнивать с датой???
это такой неочевидный способ обнуления времени, которое возникает из getdate()
+ получения первого и последнего дня текущего месяца.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / План выполнения запроса / 19 сообщений из 19, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]