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

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

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

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

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

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

Случай на грани "это не лечится".
...
Рейтинг: 0 / 0
План выполнения запроса
    #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
План выполнения запроса
    #37876176
Фотография denis2710
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
danton,
Ну для начала посмотреть по поиску как лучше работать с датами в SQL Server.Я бы например в переменные положил значения.
Код: sql
1.
left(rr.RouteID,1)

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

Ну я серьезно спрашивал)
Запрос не я писал, cам не знаю зачем convert делался
...
Рейтинг: 0 / 0
План выполнения запроса
    #37876370
Фотография denis2710
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
danton, "мопед не мой,я просто разместил объявление"
так я и серьезно и сказал,что может быть ни какого прироста производительности,но хуже с exists точно не будет.
Тип полей s.TheDate,pp.PlanDateEnd,pp.PlanDateStart какой?
...
Рейтинг: 0 / 0
План выполнения запроса
    #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
План выполнения запроса
    #37876385
Mnior
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dantonЗапрос не я писал, cам не знаю зачем convert делалсяБоже.
Это безнадёжно ...
...
Рейтинг: 0 / 0
План выполнения запроса
    #37876548
danton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MniordantonЗапрос не я писал, cам не знаю зачем convert делалсяБоже.
Это безнадёжно ...

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

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


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

Код: sql
1.
Datetime


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

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


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