Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Full join без условия / 16 сообщений из 16, страница 1 из 1
30.09.2020, 10:33
    #40004193
bitocheg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Full join без условия
Доброго дня! Подскажите как оптимизировать вот такой запрос:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select WorkingTT.CodeTT, Calendar.w, Calendar.y
from (
select 
	....) as WorkingTT
FULL JOIN
		(select 
				week as w,
				year as y 
			from tableofdate(cast('2000-01-01' as date), GETDATE())) as Calendar ON 1=1



В результате мне нужна таблица в который есть каждый магазин с каждой неделей каждого года...

Есть два запроса в одном магазины, в другом таблица дат по неделям. Я пытался создавать временные таблицы для календаря и для таблицы магазинов, заметного прироста это не дало. Я не умею разбирать планы, понимаю что на скриншоте, всё время занимает сканирование индекса... А как обойти это ?
...
Рейтинг: 0 / 0
30.09.2020, 10:35
    #40004196
msLex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Full join без условия
Вам нужен не FULL а CROSS JOIN.
...
Рейтинг: 0 / 0
30.09.2020, 11:11
    #40004205
bitocheg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Full join без условия
msLex,
Спасибо за ответ. Действительно оператор CROSS JOIN для моей задачи подходит идеально. Но увы запрос как выполнялся ~30 мин, сейчас 27 мин, так и выполняется. Может будут еще рекомендации по оптимизации ?
...
Рейтинг: 0 / 0
30.09.2020, 11:16
    #40004207
Oleg_SQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Full join без условия
bitocheg,

А сколько записей возвращается?
Без джоина с периодами сколько времени длится выборка?
Если что-то и можно оптимизировать, то это в первом селекте (который от нас скрыт)
...
Рейтинг: 0 / 0
30.09.2020, 11:21
    #40004209
Андрей Юниор
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Full join без условия
bitocheg
Я не умею разбирать планы, понимаю что на скриншоте, всё время занимает сканирование индекса.

Это только в плане. Нужно смотреть Actual Execution Plan. Eщё полезно Live Query Statistics, чтобы по 30 минут не ждать.

GETDATE() - вынести в переменную и вычислять 1 раз.
...
Рейтинг: 0 / 0
30.09.2020, 11:23
    #40004211
bitocheg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Full join без условия
Oleg_SQL,
При соединении возвращается 11млн записей. Таблица магазинов ~ 6сек = 30000 записей. И таблица дат ~ 1сек и 500 записей.

При поиске магазинов в подзапросе используется IS NOT NULL, может стоит грешить на него...?
...
Рейтинг: 0 / 0
30.09.2020, 11:25
    #40004212
Oleg_SQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Full join без условия
Андрей Юниор

GETDATE() - вынести в переменную и вычислять 1 раз.



а она 1 раз и вычисляется здесь
...
Рейтинг: 0 / 0
30.09.2020, 11:26
    #40004213
bitocheg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Full join без условия
Oleg_SQL,
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
select 
	cast(spr_tt._Code as varchar(50)) as CodeTT
	from _Reference15221 AS spr_tt 
	LEFT JOIN (
		SELECT
			REPLACE(ISNULL(t6._Description, ''), '"', '') AS [Торговая точка],
			ISNULL(t6._Fld16238, '') AS [Название торговой точки], 
			ISNULL(t6._Code, '') AS КодТТ,
			sum(t1._Fld14422) AS Сумма 
		FROM           
			dbo._AccumRg14411 AS t1 LEFT OUTER JOIN
			dbo._Reference93 AS t2 ON t1._Fld14412RRef = t2._IDRRef LEFT OUTER JOIN
			dbo._Document327 AS t3 ON t1._Fld14416_RRRef = t3._IDRRef LEFT OUTER JOIN
			dbo._Reference75 AS t4 ON t1._Fld14420RRef = t4._IDRRef LEFT OUTER JOIN
			dbo._Reference54 AS t5 ON t1._Fld14415RRef = t5._IDRRef LEFT OUTER JOIN
			dbo._Reference15221 AS t6 ON t5._Fld15516RRef = t6._IDRRef
		GROUP BY
			REPLACE(ISNULL(t6._Description, ''), '"', ''),
			ISNULL(t6._Fld16238, ''), 
			ISNULL(t6._Code, '')) AS WorkingTT ON (WorkingTT.КодТТ = spr_tt._Code) 
		where WorkingTT.Сумма IS NOT NULL



Вот первый запрос... Надеюсь поймете, что тут делаю..
...
Рейтинг: 0 / 0
30.09.2020, 11:28
    #40004214
msLex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Full join без условия
bitocheg
Oleg_SQL,
При соединении возвращается 11млн записей. Таблица магазинов ~ 6сек = 30000 записей. И таблица дат ~ 1сек и 500 записей.

Так может у вас проблемы именно с передачей этих самых 11 млн (вообще, должно быть 15) записей от сервера клиенту?


что будет при

Код: sql
1.
2.
3.
select WorkingTT.CodeTT, Calendar.w, Calendar.y
into #t
... 



?
...
Рейтинг: 0 / 0
30.09.2020, 11:30
    #40004215
Oleg_SQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Full join без условия
bitocheg
Oleg_SQL,
При соединении возвращается 11млн записей. Таблица магазинов ~ 6сек = 30000 записей. И таблица дат ~ 1сек и 500 записей.

При поиске магазинов в подзапросе используется IS NOT NULL, может стоит грешить на него...?


а нет ли там оператора OR в условии?
...
Рейтинг: 0 / 0
30.09.2020, 11:34
    #40004216
bitocheg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Full join без условия
msLex,
Хм)) 21 секунда. Это в студии так долго результат получается ?
...
Рейтинг: 0 / 0
30.09.2020, 11:35
    #40004217
msLex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Full join без условия
bitocheg
msLex,
Хм)) 21 секунда. Это в студии так долго результат получается ?

Скорее рендерит грид на 11 млн строк
...
Рейтинг: 0 / 0
30.09.2020, 11:36
    #40004218
bitocheg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Full join без условия
Oleg_SQL,
Запрос выше, там только IS NOT NULL и GROUP BY.
Но похоже это в студии так долго обрабатывается запрос. В Power Pivot тоже быстро выгрузилось..
...
Рейтинг: 0 / 0
30.09.2020, 11:36
    #40004219
bitocheg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Full join без условия
Спасибо всем за помощь! :)
...
Рейтинг: 0 / 0
30.09.2020, 11:39
    #40004223
Oleg_SQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Full join без условия
bitocheg
Oleg_SQL,
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
select 
	cast(spr_tt._Code as varchar(50)) as CodeTT
	from _Reference15221 AS spr_tt 
	LEFT JOIN (
		SELECT
			REPLACE(ISNULL(t6._Description, ''), '"', '') AS [Торговая точка],
			ISNULL(t6._Fld16238, '') AS [Название торговой точки], 
			ISNULL(t6._Code, '') AS КодТТ,
			sum(t1._Fld14422) AS Сумма 
		FROM           
			dbo._AccumRg14411 AS t1 LEFT OUTER JOIN
			dbo._Reference93 AS t2 ON t1._Fld14412RRef = t2._IDRRef LEFT OUTER JOIN
			dbo._Document327 AS t3 ON t1._Fld14416_RRRef = t3._IDRRef LEFT OUTER JOIN
			dbo._Reference75 AS t4 ON t1._Fld14420RRef = t4._IDRRef LEFT OUTER JOIN
			dbo._Reference54 AS t5 ON t1._Fld14415RRef = t5._IDRRef LEFT OUTER JOIN
			dbo._Reference15221 AS t6 ON t5._Fld15516RRef = t6._IDRRef
		GROUP BY
			REPLACE(ISNULL(t6._Description, ''), '"', ''),
			ISNULL(t6._Fld16238, ''), 
			ISNULL(t6._Code, '')) AS WorkingTT ON (WorkingTT.КодТТ = spr_tt._Code) 
		where WorkingTT.Сумма IS NOT NULL



Вот первый запрос... Надеюсь поймете, что тут делаю..



Если это весь запрос, то зачем REPLACE?

Условие "where WorkingTT.Сумма IS NOT NULL" тоже не имеет смысла, ибо не будет NULL
...
Рейтинг: 0 / 0
30.09.2020, 11:42
    #40004224
bitocheg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Full join без условия
Oleg_SQL,
Этот участок я перепишу, этот код из другой функции. Спасибо за помощь !:)
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Full join без условия / 16 сообщений из 16, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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