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

Откуда: Казань
Сообщений: 123
был написан запрос с cte

;with cte as (
select ...
)
select ...
from cte ...
...


работает медленно, а выдача небольшая


сильно быстрее работает такой вариант:
;with cte as (
select
)
insert into @a
select * from cte

select ...
from @a ...
...


можно ли как-нибудь зафорсить для первого случая, чтобы экземпляр cte посчитался и буферизировался до всего последующего?
какие-нибудь хинты материализации существуют?
21 апр 19, 16:13    [21868236]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли оптимизатору предписать сделать "временную таблицу"?  [new]
dklim.kzn
Member

Откуда: Казань
Сообщений: 123
поправка

выдача cte небольшая
21 апр 19, 16:14    [21868237]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли оптимизатору предписать сделать "временную таблицу"?  [new]
.Евгений
Member

Откуда:
Сообщений: 493
dklim.kzn,

вы для начала пробуйте все-таки искать ответ самостоятельно.
[url=]https://www.sql.ru/forum/713064/est-li-v-sql-server-analog-oraklovogo-hinta-materialize[/url]
21 апр 19, 18:58    [21868287]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли оптимизатору предписать сделать "временную таблицу"?  [new]
dklim.kzn
Member

Откуда: Казань
Сообщений: 123
.Евгений
dklim.kzn,

вы для начала пробуйте все-таки искать ответ самостоятельно.
[url=]https://www.sql.ru/forum/713064/est-li-v-sql-server-analog-oraklovogo-hinta-materialize[/url]


спасибо, я искал, но не работал с ораклом

SELECT TOP (2147483647) это звучит классически ))
22 апр 19, 08:46    [21868503]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли оптимизатору предписать сделать "временную таблицу"?  [new]
uaggster
Member

Откуда:
Сообщений: 765
dklim.kzn
.Евгений
dklim.kzn,

вы для начала пробуйте все-таки искать ответ самостоятельно.
[url=]https://www.sql.ru/forum/713064/est-li-v-sql-server-analog-oraklovogo-hinta-materialize[/url]


спасибо, я искал, но не работал с ораклом

SELECT TOP (2147483647) это звучит классически ))


Select top (select 100) percent 

Имхо, должно иметь аналогичный эффект.
Хотя я не уверен, попробуйте.
22 апр 19, 08:59    [21868510]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли оптимизатору предписать сделать "временную таблицу"?  [new]
tunknown
Member

Откуда:
Сообщений: 748
dklim.kzn
можно ли как-нибудь зафорсить для первого случая, чтобы экземпляр cte посчитался и буферизировался до всего последующего?
какие-нибудь хинты материализации существуют?
Возможно, так.
22 апр 19, 10:26    [21868576]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли оптимизатору предписать сделать "временную таблицу"?  [new]
dklim.kzn
Member

Откуда: Казань
Сообщений: 123
очень интересно

во-1 ничего не помогает, в том смысле, что запрос не завершается так же за 11 секунд, как и с переменной
ни top (2147483647)
ни top (9223372036854775807)
ни top 9223372036854775807
ни top (select 100) percent
ни top (@t) с предварительным declare @t bigint и select @t=9223372036854775807

во-2 интересно влияние option (recompile)
от него запросу плохеет ровно также, как от неприменения табличной переменной
то есть тормозит даже с использованием переменной

на самом деле в плане отличие выявилось такое, что во всех тормозящих вариантах появляется предпоследняя строка Table Spool
|--Table Spool
|--Clustered Index Scan(OBJECT:(...))

таким образом, корень зла не в материализации cte, а вообще в другой жирной буферизации
но она возникает как-то случайно) в том числе и при использовании cte вместо табличной переменной

спасибо всем ответившим
22 апр 19, 11:11    [21868635]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли оптимизатору предписать сделать "временную таблицу"?  [new]
dklim.kzn
Member

Откуда: Казань
Сообщений: 123
касательно recompile ситуация лучше
option (NO_PERFORMANCE_SPOOL, recompile)

но это опять таки помогает только в варианте с табличной переменной
в варианте использования cte без табличной переменной - чуть лучше, но всё равно хуже, чем с табличной переменной
22 апр 19, 11:57    [21868704]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли оптимизатору предписать сделать "временную таблицу"?  [new]
dklim.kzn
Member

Откуда: Казань
Сообщений: 123
не буду создавать отдельную ветку, но

есть ли удобные средства редактирования сохраненного плана?
в целом xml вроде понятен, но руками править...

кроме того минус - вроде нельзя указывать в insert/delete/uplate
(может быть, получится через указать во вью, но пока не до сук...)
22 апр 19, 14:48    [21868899]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли оптимизатору предписать сделать "временную таблицу"?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
dklim.kzn,

автор
касательно recompile ситуация лучше
option (NO_PERFORMANCE_SPOOL, recompile)


автор
Можно ли оптимизатору предписать сделать "временную таблицу"?

действительно решение
22 апр 19, 15:23    [21868937]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли оптимизатору предписать сделать "временную таблицу"?  [new]
dklim.kzn
Member

Откуда: Казань
Сообщений: 123
TaPaK
dklim.kzn,

автор
касательно recompile ситуация лучше
option (NO_PERFORMANCE_SPOOL, recompile)


автор
Можно ли оптимизатору предписать сделать "временную таблицу"?

действительно решение


Да непонятно

Вроде спул и пропадает, а время исполнения не радует
Планы глянул - ну вроде отличий не увидел между двукусочным и последним с опцией

Надо детальнее смотреть, но пока отложу))
Да, еще и загрузка процессоров отличается
Единым запросом она выше
Это кроме увеличения времени

Если не ошибаюсь, первый кусок выполняется сам по себе непараллельно быстрее, чем с параллелизмом
Может быть когда он в едином запросе - из-за параллельности и тормоза и загруз
Но сам по себе он менее секунды идет, параллелизм добавляет там полсекунды

Первый кусок - это cte в табличную переменную

Короче, интересно будет потом подокопаться как-нибудь)

Персонально поздравляю с новым президентом
Пущай он и прочее станет лучше прежнего
22 апр 19, 20:57    [21869268]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли оптимизатору предписать сделать "временную таблицу"?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
dklim.kzn,

Без тега сарказм, оказалось что не сработало...
23 апр 19, 08:50    [21869445]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить