powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Full join без условия
16 сообщений из 16, страница 1 из 1
Full join без условия
    #40004193
bitocheg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго дня! Подскажите как оптимизировать вот такой запрос:
Код: 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
Full join без условия
    #40004196
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вам нужен не FULL а CROSS JOIN.
...
Рейтинг: 0 / 0
Full join без условия
    #40004205
bitocheg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
msLex,
Спасибо за ответ. Действительно оператор CROSS JOIN для моей задачи подходит идеально. Но увы запрос как выполнялся ~30 мин, сейчас 27 мин, так и выполняется. Может будут еще рекомендации по оптимизации ?
...
Рейтинг: 0 / 0
Full join без условия
    #40004207
Oleg_SQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bitocheg,

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

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

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

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

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



а она 1 раз и вычисляется здесь
...
Рейтинг: 0 / 0
Full join без условия
    #40004213
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



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

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


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

Скорее рендерит грид на 11 млн строк
...
Рейтинг: 0 / 0
Full join без условия
    #40004218
bitocheg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Oleg_SQL,
Запрос выше, там только IS NOT NULL и GROUP BY.
Но похоже это в студии так долго обрабатывается запрос. В Power Pivot тоже быстро выгрузилось..
...
Рейтинг: 0 / 0
Full join без условия
    #40004219
bitocheg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем за помощь! :)
...
Рейтинг: 0 / 0
Full join без условия
    #40004223
Oleg_SQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Full join без условия
    #40004224
bitocheg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Oleg_SQL,
Этот участок я перепишу, этот код из другой функции. Спасибо за помощь !:)
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Full join без условия
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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