Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Есть ли в SQL Server аналог ораклового хинта "+ materialize" ?  [new]
Материалист
Guest
Всем здрасьте.
Есть ли способ как-то сделать аналог вот этого: select /*+ materialize */ deptno from dept
(сам запрос, конечно, гораздо сложнее, привести его тут не могу; здесь только пример)
18 ноя 09, 15:44    [7945954]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли в SQL Server аналог ораклового хинта "+ materialize" ?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36801
И все должны быть в курсе, что делает хинт materialize в оракле?
18 ноя 09, 15:46    [7945967]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли в SQL Server аналог ораклового хинта "+ materialize" ?  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Не рекомендуется также задавать вопрос в виде
"А какой аналог функции int_in_any_firecase(p1, p2) из MyLittleVisualRDBMS существует в MS SQL ?"
Поверьте, не все в этой жизни сталкивались с продуктом по имени MyLittleVisualRDBMS
и использовали его функцию int_in_any_firecase().
Лучше опишите, какой результат должна давать функция, например,
"Получить номер дня недели из текущей даты ?"
(Рекомендации, п. 3)
18 ноя 09, 15:47    [7945978]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли в SQL Server аналог ораклового хинта "+ materialize" ?  [new]
Материалист
Guest
Гавриленко Сергей Алексеевич,

если есть некая CTE, используемая в нескольких местах, и стоимость её выборки достаточно высока, то этот хинт создаёт для её результатов временную таблицу, чтобы делать такую дорогую выборку делать только один раз.
18 ноя 09, 15:49    [7945985]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли в SQL Server аналог ораклового хинта "+ materialize" ?  [new]
Материалист
Guest
Паганель,

про MyLittleVisualRDBMS - спасибо, паржал
18 ноя 09, 15:51    [7946000]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли в SQL Server аналог ораклового хинта "+ materialize" ?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36801
Тогда либо индексированная вьюха (если вы со своей выборкай пролезаете в ограничения), либо перманентная таблица, либо еще что-нибудь. Прямого аналога нет.
18 ноя 09, 15:51    [7946002]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли в SQL Server аналог ораклового хинта "+ materialize" ?  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Материалист,

индексированные VIEW что ли?

Вот

Только спокойно!
18 ноя 09, 15:51    [7946003]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли в SQL Server аналог ораклового хинта "+ materialize" ?  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Материалист
этот хинт создаёт для её результатов временную таблицу
CREATE TABLE (Transact-SQL)
см. раздел "Temporary Tables"
18 ноя 09, 15:51    [7946005]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли в SQL Server аналог ораклового хинта "+ materialize" ?  [new]
Материалист
Guest
iap, Паганель: спасибо за тынцы, это я видел, ес-сно. Интересует, можно ли это делать "на лету", БЕЗ предварительного создания via DDL.
18 ноя 09, 15:54    [7946022]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли в SQL Server аналог ораклового хинта "+ materialize" ?  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Материалист
можно ли это делать "на лету"
Что "это" ?
Таблицу создавать ?
Я предлагаю использовать для этого команду CREATE TABLE
Что в переводе означает "создать таблицу"...
18 ноя 09, 15:57    [7946050]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли в SQL Server аналог ораклового хинта "+ materialize" ?  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 33339
Блог
или так
select * into materialize_deptno from dept
18 ноя 09, 16:02    [7946085]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли в SQL Server аналог ораклового хинта "+ materialize" ?  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 33339
Блог
materialize_deptno можно заменить на #materialize_deptno или ##materialize_deptno в зависимости от требуемой доступности и времени жизни таблицы
18 ноя 09, 16:04    [7946089]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли в SQL Server аналог ораклового хинта "+ materialize" ?  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
table variable

-------------------------
There’s no silver bullet!
18 ноя 09, 16:04    [7946091]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли в SQL Server аналог ораклового хинта "+ materialize" ?  [new]
Материалист
Guest
Паганель,

имеется в виду, что при выполнении ОДНОГО select`a СУБД может при определенных обстоятельствах создать "времянку", если по запросу понятно, что данные некоторого его участка (СТЕшки) используются много раз. То есть, если обращение к одной и той же СТЕшке происходит многократно - зачем постоянно вытряхивать данные из настоящих таблиц, когда можно сделать это один раз и сохранить во времянке (которая исчезнет сразу после завершения селекта).
Можно ли это заставить сделать принудительно, каким-либо хинтом ?
18 ноя 09, 16:07    [7946116]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли в SQL Server аналог ораклового хинта "+ materialize" ?  [new]
Glory
Member

Откуда:
Сообщений: 104760
select * into #xxx ...
18 ноя 09, 16:09    [7946133]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли в SQL Server аналог ораклового хинта "+ materialize" ?  [new]
Материалист
Guest
Glory, locky, Критик: тогда это всё будет не один запрос, а несколько. А одним - никак ?
18 ноя 09, 16:13    [7946162]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли в SQL Server аналог ораклового хинта "+ materialize" ?  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Материалист
Можно ли это заставить сделать принудительно, каким-либо хинтом ?
Уловка, добавляющая промежуточную материализацию в соединение
не люблю я эти вещи (с)
18 ноя 09, 16:13    [7946164]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли в SQL Server аналог ораклового хинта "+ materialize" ?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Материалист
Glory, locky, Критик: тогда это всё будет не один запрос, а несколько. А одним - никак ?

С чего это будет несколько запросов ?
18 ноя 09, 16:13    [7946168]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли в SQL Server аналог ораклового хинта "+ materialize" ?  [new]
Материалист
Guest
Glory,

1) select * into #xxx ...

2) select *
from #xxx x1 join #xxx x2 on ... join #xxx x3 on ...

я насчитал здесь две select-инструкции :-)
18 ноя 09, 16:18    [7946212]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли в SQL Server аналог ораклового хинта "+ materialize" ?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Материалист
Glory,

1) select * into #xxx ...

2) select *
from #xxx x1 join #xxx x2 on ... join #xxx x3 on ...

я насчитал здесь две select-инструкции :-)

Т.е. у вас один и тот же подзапрос повторяется -цать раз в запросе ?
И вы считаете, что MSSQL будет каждый раз заново выполнять этот подзапрос ?
18 ноя 09, 16:21    [7946237]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли в SQL Server аналог ораклового хинта "+ materialize" ?  [new]
Материалист
Guest
Паганель,

спасибо большое!
Только вот это насторожило:
Adam Machanic
Не пробуйте эту уловку на "боевых" системах. Не полагайтесь на эти не документированные возможности. Это не решение Ваших проблем.


И еще: select top <huge_number> from ... order by - это единственное средство или есть еще какие-нибудь ?
18 ноя 09, 16:22    [7946241]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли в SQL Server аналог ораклового хинта "+ materialize" ?  [new]
Материалист
Guest
Glory
И вы считаете, что MSSQL будет каждый раз заново выполнять этот подзапрос ?
по кр. мере, предполагаю... ибо когда смотрел план, то видел ПОВТОРНОЕ ОБРАЩЕНИЕ к таблицам.
18 ноя 09, 16:23    [7946264]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли в SQL Server аналог ораклового хинта "+ materialize" ?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Материалист
Glory
И вы считаете, что MSSQL будет каждый раз заново выполнять этот подзапрос ?
по кр. мере, предполагаю... ибо когда смотрел план, то видел ПОВТОРНОЕ ОБРАЩЕНИЕ к таблицам.

А что показывает IO statistics ? Сколько reads/scans было сделано для каждой таблицы ?
18 ноя 09, 16:27    [7946291]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли в SQL Server аналог ораклового хинта "+ materialize" ?  [new]
Материалист
Guest
Glory
[quot Материалист]А что показывает IO statistics ? Сколько reads/scans было сделано для каждой таблицы ?
сейчас буду делать эксперимент...
18 ноя 09, 16:29    [7946299]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли в SQL Server аналог ораклового хинта "+ materialize" ?  [new]
Anddros
Member

Откуда:
Сообщений: 1077
Паганель
Материалист
Можно ли это заставить сделать принудительно, каким-либо хинтом ?
Уловка, добавляющая промежуточную материализацию в соединение
не люблю я эти вещи (с)


По-моему это способ через задницу сделать то же самое, что получится при применении обычной оконной функции в 2005-м и выше. :)

Оптимизатор сам построит запрос, где в плане будет обычный table spool. Что по сути и является аналогом 'materialize' в оракле.
18 ноя 09, 16:47    [7946426]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить