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

Откуда:
Сообщений: 26
у меня задача простая группировка большой таблицы, и по ключу связывание со справочником, после этого из поля справочника выбрать текст и слегка его модифицировать. Сделал так
select 'ch_filter'+ltrim(str(A.id_filter)),dbo.html_getText(FS.FilterDesc+'#','#subject=','#'),cc 

from(
select L.id_filter,count(*) as cc 
FROM            ngd32_to_source AS L INNER JOIN
                         Import_Big AS D ON L.ndg32 = D.ndg32 and D.C_Flag in(0,1)
						 
group by L.id_filter
)A 

inner join dbo.FilterSource FS on A.id_filter=FS.id_filter--это справочник
order by dbo.html_getText(FS.FilterDesc+'#','#subject=','#')


так вот подзапрос выполняется за 8 сек и если делать через темповую таблицу все отлично итог 8 сек, но мне это надо внедрить в общий union и поэтому не хотелось бы городить темповые таблицы.
сам подзапрос возвращает у меня 10 строчек и нагрузка справочник и модификация не существенна.
Но если оставить вот так, то компилятор видимо вставляет это текстовое поле в общую выборку, и модифицирует текст для всех 10М+ строк и запрос уже считается 30 секунд.
Думаю что есть какая то подсказка которая ему намекнёт что подзапрос надо выполнить как есть, но не могу её найти.
Есть варианты?

Сообщение было отредактировано: 15 мар 18, 14:43
15 мар 18, 14:42    [21258888]     Ответить | Цитировать Сообщить модератору
 Re: Подзапрос sql есть ли флаги для подсказок компилятору  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36887
ssa82
Но если оставить вот так, то компилятор видимо вставляет это текстовое поле в общую выборку,
Т.е вы план не смотрели, так гадаете?
15 мар 18, 14:45    [21258909]     Ответить | Цитировать Сообщить модератору
 Re: Подзапрос sql есть ли флаги для подсказок компилятору  [new]
ssa82
Member

Откуда:
Сообщений: 26
вот тут то я и застрял. ибо по плану он показывает честно все растраты на внутренний запрос, когда появляются внешние там по 0.
Но если выполнять внутренний отдельно в темповую потом селект и связка со справочником то 8 сек
Если совместно 30с

и тут я не понимаю где косяк.
15 мар 18, 14:52    [21258942]     Ответить | Цитировать Сообщить модератору
 Re: Подзапрос sql есть ли флаги для подсказок компилятору  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
ssa82
вот тут то я и застрял. ибо по плану он показывает честно все растраты на внутренний запрос, когда появляются внешние там по 0.
Но если выполнять внутренний отдельно в темповую потом селект и связка со справочником то 8 сек
Если совместно 30с

и тут я не понимаю где косяк.

косяк - скалярка
15 мар 18, 14:55    [21258952]     Ответить | Цитировать Сообщить модератору
 Re: Подзапрос sql есть ли флаги для подсказок компилятору  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36887
ssa82
вот тут то я и застрял. ибо по плану он показывает честно все растраты на внутренний запрос, когда появляются внешние там по 0.
Но если выполнять внутренний отдельно в темповую потом селект и связка со справочником то 8 сек
Если совместно 30с

и тут я не понимаю где косяк.
Это вы так план пересказываете?

Сообщение было отредактировано: 15 мар 18, 15:01
15 мар 18, 15:01    [21258987]     Ответить | Цитировать Сообщить модератору
 Re: Подзапрос sql есть ли флаги для подсказок компилятору  [new]
ssa82
Member

Откуда:
Сообщений: 26
действительно если убрать функцию скалярную то запрос считается оперативно.
но если этот запрос разбить на шагам
сделать выборку в темп таблицу результат 10 строк
и запустить ту же функцию на этих 10 строках то результат мгновенно.
почему если она по моей логике делает тоже на самом деле начинает тратить ещё 20 секунд куда то.

Про план запроса, я не в курсе как тут можно что то прикреплять)
15 мар 18, 15:06    [21259013]     Ответить | Цитировать Сообщить модератору
 Re: Подзапрос sql есть ли флаги для подсказок компилятору  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
ssa82,

можно попробовать OPTION(FORCE ORDER) но вообще запро - бред
15 мар 18, 15:08    [21259017]     Ответить | Цитировать Сообщить модератору
 Re: Подзапрос sql есть ли флаги для подсказок компилятору  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36887
ssa82
Про план запроса, я не в курсе как тут можно что то прикреплять)
Сохранить в студии в файл и прицепить.
15 мар 18, 15:08    [21259018]     Ответить | Цитировать Сообщить модератору
 Re: Подзапрос sql есть ли флаги для подсказок компилятору  [new]
Konst_One
Member

Откуда:
Сообщений: 11517
сказали же, замени свою скалярку. ну ,например, на табличную ф-ю
15 мар 18, 15:08    [21259021]     Ответить | Цитировать Сообщить модератору
 Re: Подзапрос sql есть ли флаги для подсказок компилятору  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Konst_One
сказали же, замени свою скалярку. ну ,например, на табличную ф-ю

табличная не даст ничего. inline
15 мар 18, 15:13    [21259043]     Ответить | Цитировать Сообщить модератору
 Re: Подзапрос sql есть ли флаги для подсказок компилятору  [new]
ssa82
Member

Откуда:
Сообщений: 26
я не понимаю почему через вложеный скалярная функция все портит а через темповую нет?
15 мар 18, 15:27    [21259099]     Ответить | Цитировать Сообщить модератору
 Re: Подзапрос sql есть ли флаги для подсказок компилятору  [new]
ssa82
Member

Откуда:
Сообщений: 26
план через вложенный

К сообщению приложен файл (через вложенный.sqlplan - 44Kb) cкачать
15 мар 18, 15:28    [21259101]     Ответить | Цитировать Сообщить модератору
 Re: Подзапрос sql есть ли флаги для подсказок компилятору  [new]
ssa82
Member

Откуда:
Сообщений: 26
план через темповую группировка

К сообщению приложен файл (через темповую.sqlplan - 134Kb) cкачать
15 мар 18, 15:30    [21259110]     Ответить | Цитировать Сообщить модератору
 Re: Подзапрос sql есть ли флаги для подсказок компилятору  [new]
ssa82
Member

Откуда:
Сообщений: 26
план через темповую выбока
не влез в один блок по размеру

К сообщению приложен файл (через темповую2.sqlplan - 22Kb) cкачать
15 мар 18, 15:30    [21259114]     Ответить | Цитировать Сообщить модератору
 Re: Подзапрос sql есть ли флаги для подсказок компилятору  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
ssa82
я не понимаю почему через вложеный скалярная функция все портит а через темповую нет?

может дело в количестве рз сколько она выполняется?
15 мар 18, 15:31    [21259119]     Ответить | Цитировать Сообщить модератору
 Re: Подзапрос sql есть ли флаги для подсказок компилятору  [new]
ssa82
Member

Откуда:
Сообщений: 26
если верить плану то когда она(функция) появляется, она срабатывает на 2 строках. а 10М+ строк уже сгруппировано к этому времени, по идее.. но по времени выполнения подозрение именно что план другой.
хотя это уже вне моего понимания вот и думаю что дело в чём то простом, но в чём?
15 мар 18, 15:38    [21259158]     Ответить | Цитировать Сообщить модератору
 Re: Подзапрос sql есть ли флаги для подсказок компилятору  [new]
invm
Member

Откуда: Москва
Сообщений: 9265
ssa82
я не понимаю почему через вложеный скалярная функция все портит а через темповую нет?
Потому что наличие в запросе скалярной UDF исключает построение плана с использованием параллелизма.
15 мар 18, 15:41    [21259169]     Ответить | Цитировать Сообщить модератору
 Re: Подзапрос sql есть ли флаги для подсказок компилятору  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
+ индекс на Import_Big.IndC_Flag не подходит, но кто заботиться о поднятии 0,5Гб....
15 мар 18, 15:54    [21259220]     Ответить | Цитировать Сообщить модератору
 Re: Подзапрос sql есть ли флаги для подсказок компилятору  [new]
ssa82
Member

Откуда:
Сообщений: 26
invm,
все верно, на этом вопрос закрываю.
15 мар 18, 15:57    [21259232]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить