Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Можно ли оптимизатору предписать сделать "временную таблицу"? / 12 сообщений из 12, страница 1 из 1
21.04.2019, 16:13
    #39804503
dklim.kzn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли оптимизатору предписать сделать "временную таблицу"?
был написан запрос с cte

Код: sql
1.
2.
3.
4.
5.
6.
;with cte as (
select ...
)
select ...
from cte ...
...



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


сильно быстрее работает такой вариант:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
;with cte as (
select
)
insert into @a
select * from cte

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



можно ли как-нибудь зафорсить для первого случая, чтобы экземпляр cte посчитался и буферизировался до всего последующего?
какие-нибудь хинты материализации существуют?
...
Рейтинг: 0 / 0
21.04.2019, 16:14
    #39804504
dklim.kzn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли оптимизатору предписать сделать "временную таблицу"?
поправка

выдача cte небольшая
...
Рейтинг: 0 / 0
21.04.2019, 18:58
    #39804529
.Евгений
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли оптимизатору предписать сделать "временную таблицу"?
dklim.kzn,

вы для начала пробуйте все-таки искать ответ самостоятельно.
https://www.sql.ru/forum/713064/est-li-v-sql-server-analog-oraklovogo-hinta-materialize
...
Рейтинг: 0 / 0
22.04.2019, 08:46
    #39804641
dklim.kzn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли оптимизатору предписать сделать "временную таблицу"?
.Евгенийdklim.kzn,

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


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

SELECT TOP (2147483647) это звучит классически ))
...
Рейтинг: 0 / 0
22.04.2019, 08:59
    #39804646
uaggster
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли оптимизатору предписать сделать "временную таблицу"?
dklim.kzn.Евгенийdklim.kzn,

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


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

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

Код: sql
1.
Select top (select 100) percent 


Имхо, должно иметь аналогичный эффект.
Хотя я не уверен, попробуйте.
...
Рейтинг: 0 / 0
22.04.2019, 10:26
    #39804695
tunknown
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли оптимизатору предписать сделать "временную таблицу"?
dklim.kznможно ли как-нибудь зафорсить для первого случая, чтобы экземпляр cte посчитался и буферизировался до всего последующего?
какие-нибудь хинты материализации существуют?Возможно, так .
...
Рейтинг: 0 / 0
22.04.2019, 11:11
    #39804743
dklim.kzn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли оптимизатору предписать сделать "временную таблицу"?
очень интересно

во-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 вместо табличной переменной

спасибо всем ответившим
...
Рейтинг: 0 / 0
22.04.2019, 11:57
    #39804795
dklim.kzn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли оптимизатору предписать сделать "временную таблицу"?
касательно recompile ситуация лучше
option (NO_PERFORMANCE_SPOOL, recompile)

но это опять таки помогает только в варианте с табличной переменной
в варианте использования cte без табличной переменной - чуть лучше, но всё равно хуже, чем с табличной переменной
...
Рейтинг: 0 / 0
22.04.2019, 14:48
    #39804920
dklim.kzn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли оптимизатору предписать сделать "временную таблицу"?
не буду создавать отдельную ветку, но

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

кроме того минус - вроде нельзя указывать в insert/delete/uplate
(может быть, получится через указать во вью, но пока не до сук...)
...
Рейтинг: 0 / 0
22.04.2019, 15:23
    #39804939
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли оптимизатору предписать сделать "временную таблицу"?
dklim.kzn,

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

автор Можно ли оптимизатору предписать сделать "временную таблицу"?
действительно решение
...
Рейтинг: 0 / 0
22.04.2019, 20:57
    #39805075
dklim.kzn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли оптимизатору предписать сделать "временную таблицу"?
TaPaKdklim.kzn,

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

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

Да непонятно

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

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

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

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

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

Персонально поздравляю с новым президентом
Пущай он и прочее станет лучше прежнего
...
Рейтинг: 0 / 0
23.04.2019, 08:50
    #39805169
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли оптимизатору предписать сделать "временную таблицу"?
dklim.kzn,

Без тега сарказм, оказалось что не сработало...
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Можно ли оптимизатору предписать сделать "временную таблицу"? / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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