Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 [4] 5 6   вперед  Ctrl      все
 Re: Вложенный запрос  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
SET STATISTICS IO ON 
;WITH CTE AS 
(SELECT * FROM sys.internal_tables) 
SELECT * FROM CTE 

автор
Table 'syssingleobjrefs'. Scan count 32, logical reads 96, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'syspalvalues'. Scan count 0, logical reads 32, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'syspalnames'. Scan count 0, logical reads 32, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'sysschobjs'. Scan count 1, logical reads 43, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

Что-то я не вижу попыток заехать в тембдб. СТЕ есть, а "Объекта СТЕ" в тембдебе нету, миииистикааааа.
21 дек 17, 17:41    [21053024]     Ответить | Цитировать Сообщить модератору
 Re: Вложенный запрос  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 398
Cammomile
Что-то я не вижу попыток заехать в тембдб. СТЕ есть, а "Объекта СТЕ" в тембдебе нету, миииистикааааа.

Бы ли бы Вы хоть на йоту образованней, то использовали CTE в таком запросе, где его использование оправдано, а не пытались придумать настолько тупой запрос, который оптимизатор спокойно развернул без CTE.
21 дек 17, 18:19    [21053162]     Ответить | Цитировать Сообщить модератору
 Re: Вложенный запрос  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
Ого, сначала у него " итак понятно что объект не объект , а данные для запроса".

Теперь у него " итак понятно, что СТЕ не СТЕ".

С таким балаболом мастером пера сложно вести предметный разговор...
21 дек 17, 18:27    [21053186]     Ответить | Цитировать Сообщить модератору
 Re: Вложенный запрос  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 398
Cammomile
С таким балаболом мастером пера сложно вести предметный разговор...

Самокритично Вы про себя )
Насколько Тапок есть флудер и дитя бескультурное, но даже он написал с CTE запрос, создающий и Worktable И Workfile )))
21 дек 17, 18:31    [21053196]     Ответить | Цитировать Сообщить модератору
 Re: Вложенный запрос  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
ptr128
Cammomile
С таким балаболом мастером пера сложно вести предметный разговор...

Самокритично Вы про себя )
Насколько Тапок есть флудер и дитя бескультурное, но даже он написал с CTE запрос, создающий и Worktable И Workfile )))

рыбка, тебе же уже сказали про 0 или уже забыла?
21 дек 17, 18:37    [21053211]     Ответить | Цитировать Сообщить модератору
 Re: Вложенный запрос  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 398
TaPaK
рыбка, тебе же уже сказали про 0 или уже забыла?

А Вам сказали, что если на автомобиле не ездить, то для него и топливо не нужно?
Или про то, что если его толкать или тянуть буксиром, то можно ездить без топлива?
Следует ли из этого, что автомобиль не использует топливо? )))
21 дек 17, 18:44    [21053231]     Ответить | Цитировать Сообщить модератору
 Re: Вложенный запрос  [new]
invm
Member

Откуда: Москва
Сообщений: 9345
ptr128
который оптимизатор спокойно развернул без CTE.
А можете привести пример запроса, который оптимизатор не "разворачивает без CTE". Или, хотя бы, какой-нибудь признак в плане выполнения по которому можно понять, что CTE не "развернут".
21 дек 17, 19:11    [21053307]     Ответить | Цитировать Сообщить модератору
 Re: Вложенный запрос  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 398
invm
ptr128
который оптимизатор спокойно развернул без CTE.
А можете привести пример запроса, который оптимизатор не "разворачивает без CTE". Или, хотя бы, какой-нибудь признак в плане выполнения по которому можно понять, что CTE не "развернут".

Так я же писал:
ptr128
Насколько Тапок есть флудер и дитя бескультурное, но даже он написал с CTE запрос, создающий и Worktable И Workfile )))


Вот его запрос:
TaPaK
;WITH C(I) AS (SELECT TOP 1 number FROM master..spt_Values ),X AS (SELECT a.I FROM C a INNER HASH JOIN C b ON a.I = b.I) SELECT * FROM x


И он честно выдает:
Table 'Workfile'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'spt_values'. Scan count 2, logical reads 4, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

Workfile и Worktable в tempdb созданы. Но из-за простоты запроса не понадобились.

Если же использовать CTE "по назначению", то есть для рекурсивного запроса, взяв образец, например, из
документации:

-- Create an Employee table.  
CREATE TABLE dbo.MyEmployees  
(  
EmployeeID smallint NOT NULL,  
FirstName nvarchar(30)  NOT NULL,  
LastName  nvarchar(40) NOT NULL,  
Title nvarchar(50) NOT NULL,  
DeptID smallint NOT NULL,  
ManagerID int NULL,  
 CONSTRAINT PK_EmployeeID PRIMARY KEY CLUSTERED (EmployeeID ASC)   
);  
-- Populate the table with values.  
INSERT INTO dbo.MyEmployees VALUES   
 (1, N'Ken', N'Sánchez', N'Chief Executive Officer',16,NULL)  
,(273, N'Brian', N'Welcker', N'Vice President of Sales',3,1)  
,(274, N'Stephen', N'Jiang', N'North American Sales Manager',3,273)  
,(275, N'Michael', N'Blythe', N'Sales Representative',3,274)  
,(276, N'Linda', N'Mitchell', N'Sales Representative',3,274)  
,(285, N'Syed', N'Abbas', N'Pacific Sales Manager',3,273)  
,(286, N'Lynn', N'Tsoflias', N'Sales Representative',3,285)  
,(16,  N'David',N'Bradley', N'Marketing Manager', 4, 273)  
,(23,  N'Mary', N'Gibson', N'Marketing Specialist', 4, 16);  
WITH DirectReports(ManagerID, EmployeeID, Title, EmployeeLevel) AS   
(  
    SELECT ManagerID, EmployeeID, Title, 0 AS EmployeeLevel  
    FROM dbo.MyEmployees   
    WHERE ManagerID IS NULL  
    UNION ALL  
    SELECT e.ManagerID, e.EmployeeID, e.Title, EmployeeLevel + 1  
    FROM dbo.MyEmployees AS e  
        INNER JOIN DirectReports AS d  
        ON e.ManagerID = d.EmployeeID   
)  
SELECT ManagerID, EmployeeID, Title, EmployeeLevel   
FROM DirectReports  
ORDER BY ManagerID;  


То увидим уже активную работу с Worktable в tempdb:

Table 'Worktable'. Scan count 2, logical reads 55, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'MyEmployees'. Scan count 2, logical reads 21, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
21 дек 17, 19:24    [21053346]     Ответить | Цитировать Сообщить модератору
 Re: Вложенный запрос  [new]
invm
Member

Откуда: Москва
Сообщений: 9345
ptr128,

Так что есть признак "неразворачиваемости"?
21 дек 17, 21:04    [21053683]     Ответить | Цитировать Сообщить модератору
 Re: Вложенный запрос  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 398
invm
ptr128,

Так что есть признак "неразворачиваемости"?

Вам надо, Вы и исследуйте. Мне уже эта тема изрядно поднадоела. Если дети хотят использовать где ни попадя CTE - пусть используют. Тех, которые прийдут ко мне, сам переучу, продемонстрировав его ущербность на больших объемах данных. А остальные пусть работают на конкурентов )
21 дек 17, 21:14    [21053712]     Ответить | Цитировать Сообщить модератору
 Re: Вложенный запрос  [new]
invm
Member

Откуда: Москва
Сообщений: 9345
ptr128
Вам надо, Вы и исследуйте.
Т.е. вы таки почти четыре страницы заливали о том, о чем сами ничего не знаете.
ptr128
Мне уже эта тема изрядно поднадоела
Само собой. Так обычно случается, когда нечего ответить на вопросы и аргументы оппонентов.
ptr128
Тех, которые прийдут ко мне, сам переучу, продемонстрировав его ущербность на больших объемах данных.
Только не берите тех, которые смогут раскусить вашу собственную ущербность в данном вопросе. Или въедливых, которые будут доставать вопросом "а почему?". Иначе изрядно поднадоест переучивать.
21 дек 17, 22:16    [21053875]     Ответить | Цитировать Сообщить модератору
 Re: Вложенный запрос  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31355
ptr128
alexeyvg
"Объектов CTE и вложенных запросов" просто не существует как явления

Смысл придираться к словам?
По смыслу и так ясно, что речь идет об "объектах создаваемых CTE" и "объектов создаваемых вложенными запросами"
Придираюсь? Тут все именно так трактуют ваши слова.

Ещё раз спрошу: я не понимаю, почему в фразе "Объекты CTE, ..., вложенных запросов и т.п. размещаются в tempdb" вами не упомянуты обычные запросы из одной таблицы, даже без группировок?
Фраза была бы вполне закончена: "Объекты CTE, всех запросов и т.п. размещаются в tempdb"
И она бы по крайней мере хоть немножко бы соответствовала действительности, пусть с корявой формулировкой.

Вложенные запросы, и их разновидность "CTE", не отличаются в этом смысле от каких либо других запросов.

CTE и вложенные запросы не отличаются от оператора join.

Для сервера нету никаких особых "CTE" и "вложенных запросов", нет операторов database engine для них, есть просто синтаксис "SQL", его семантика после синтаксического анализа преобразуется в операторы обработки множеств, потом оптимизатор из этого делает исполняемые операторы для database engine, он выполняет эти операторы, и если памяти маловато, то он использует для промежуточного хранения tempdb.
21 дек 17, 22:35    [21053926]     Ответить | Цитировать Сообщить модератору
 Re: Вложенный запрос  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 398
invm
Так обычно случается, когда нечего ответить на вопросы и аргументы оппонентов.

Я не вижу вопросов и аргументов от Вас по интересующей меня теме. В упор.

Вы очень захотели знать, по какому признаку можно узнать, использована будет tempdb при CTE запросе или нет.

Каким образом это относится к моему утверждению мне совершенно не понятно.
"Объекты CTE, табличных переменных, вложенных запросов и т.п. размещаются в tempdb."
Я нигде не писал, что "всегда размещаются", или "обязательно размещаются". Я просто привел ссылки на MS, доказывающие мое утверждение.
Мне совершенно не интересны частные случаи когда CTE не используют tempdb, из-за того, что такие случаи имеют нулевую практическую ценность.
Вашу просьбу "А можете привести пример запроса, который оптимизатор не "разворачивает без CTE"." я удовлетворил. И что происходит даже на примитивном рекурсивном запросе с CTE - я Вам продемонстрировал.
Вы и так уже признались, что были не в курсе того, что tempdb использует оперативную память, пока ее достаточно и то, что не знали, что CTE, табличные переменные и вложенные запросы размещают создаваемые ими внутренние объекты в tempdb. (Я перефразировал фразу "Объекты CTE, табличных переменных, вложенных запросов...", так как Вы признались, что у Вас проблемы с русским языком и Вы искренне считаете CTE, переменные и запросы внутренними объектами SQL)

Короче, или по теме, или общайтесь сами с собой.
Я Вам ничего не обязан. И обучать того, кто учиться не желает тоже не собираюсь.
21 дек 17, 22:36    [21053928]     Ответить | Цитировать Сообщить модератору
 Re: Вложенный запрос  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31355
ptr128
Если же использовать CTE "по назначению", то есть для рекурсивного запроса, взяв образец, например, из
Боже, ну там же прямое указание использовать tempdb
Выполните то же самое без CTE:
SELECT TOP 1 a.number 
    FROM master..spt_Values a 
        INNER HASH JOIN master..spt_Values b 
        ON a.number = b.number

HASH - вот волшебное слово, а не CTE
Уберите слово HASH из вашего запроса с CTE - и будет без worktable
21 дек 17, 22:53    [21053961]     Ответить | Цитировать Сообщить модератору
 Re: Вложенный запрос  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 398
[quot alexeyvg]
ptr128
пропущено...

Смысл придираться к словам?
По смыслу и так ясно, что речь идет об "объектах создаваемых CTE" и "объектов создаваемых вложенными запросами"
Придираюсь? Тут все именно так трактуют ваши слова.

Я уже извинился:
ptr128
Извините, я не учел, что здесь не все владеют русским и в фразе "Объекты строительства" считают само строительство объектом.


alexeyvg
Ещё раз спрошу: я не понимаю, почему в фразе "Объекты CTE, ..., вложенных запросов и т.п. размещаются в tempdb" вами не упомянуты обычные запросы из одной таблицы, даже без группировок?

Во-первых, приведите доказательство того, что "обычный запрос из одной таблицы [...] без группировок" размещает внутренний объект в tempdb. И без сортировки, пожалуйста )
Во-вторых, там еще очень много что не упомянуто: курсоры, почта, события, индексы, версионирование строк, триггеры и т.п.
Совершенно не вижу смысла перечислять все. Речь была вообще то исключительно о том, что CTE создает объекты в tempdb. Остальное просто к слову пришлось )

alexeyvg
Фраза была бы вполне закончена: "Объекты CTE, всех запросов и т.п. размещаются в tempdb"

Ну а как же курсоры, индексы и версионирования строк? )))
Еще раз, речь шла именно о CTE. Кстати, что интересно, вложенные запросы только Вас возбудили. Хотите извинюсь? Они ведь тоже не всегда порождают что-то в tempdb. Но уж если создают объект - размещают его именно там. )))

alexeyvg
Вложенные запросы, и их разновидность "CTE", не отличаются в этом смысле от каких либо других запросов.
CTE и вложенные запросы не отличаются от оператора join.

Увы, и те, и другие, различаются, причем очень существенно. А именно тем, что не предоставляют возможность создать по результату их выполнения необходимых индексов.

alexeyvg
он выполняет эти операторы, и если памяти маловато, то он использует для промежуточного хранения tempdb.

Наоборот, я уже приводил цитату и ссылку: "If memory is available, both table variables and temporary tables are created and processed while in memory (data cache)."
Но даже это не так уж важно. Для меня важно то, что для временных таблиц я легко могу создать необходимые мне индексы, а для CTE, табличных переменных и подзапросов - нет. И именно поэтому на больших объемах данных эти механизмы проигрывают в производительности старым добрым временным таблицам. Которые, к тому же, можно размещать, при большом желании, in-memory.
21 дек 17, 22:54    [21053962]     Ответить | Цитировать Сообщить модератору
 Re: Вложенный запрос  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 398
alexeyvg
Боже, ну там же прямое указание использовать tempdb
Уберите слово HASH из вашего запроса с CTE - и будет без worktable

Это не мой запрос. И вы пропустили развитие тему. Там как раз явно было сказано, что HASH JOIN точно создаст объект в tempdb. )))
21 дек 17, 22:56    [21053966]     Ответить | Цитировать Сообщить модератору
 Re: Вложенный запрос  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31355
ptr128
alexeyvg
Боже, ну там же прямое указание использовать tempdb
Уберите слово HASH из вашего запроса с CTE - и будет без worktable

Это не мой запрос. И вы пропустили развитие тему. Там как раз явно было сказано, что HASH JOIN точно создаст объект в tempdb. )))
Ваш - я имел в виду тот запрос, который вы привели.

Может, я что то пропустил, я просто смотрю на эти фразы:
ptr128
Он от момента рождения CTE так и делал. Попробуйте прогнать CTE на большим объемом данных и понаблюдайте за Tempdb
и
ptr128
Объекты CTE, табличных переменных, вложенных запросов и т.п. размещаются в tempdb.

и конкретный пример с статистикой и HASH.

И сравниваем с цитируемой фразой:
ptr128
can use internal objects to store intermediate results for hash joins, hash aggregates, or sorting.

В которой тоже не говорится, что CTE и вложенные запросы - объекты, хранимые в tempdb, а всего лишь то, что выполнение этого может потребовать использовать tempdb

Согласитесь уже, что реальность, а так же цитируемые источники имеют совершенно противоположный смысл вашим утверждениям.

Ещё раз, сравните:
- "Объекты CTE, табличных переменных, вложенных запросов и т.п. размещаются в tempdb"
и
- "некоторые операторы database engine, например, hash joins, hash aggregates, или sorting, могут использовать tempdb"

Тут собрались люди, достаточно хорошо знающие сиквел, почитывающие блоги писателей ядра сиквела, и даже заходят те, кто сами пишет об этом книги, и им режет взгляд такая вольная интерпретация.
21 дек 17, 23:11    [21053985]     Ответить | Цитировать Сообщить модератору
 Re: Вложенный запрос  [new]
invm
Member

Откуда: Москва
Сообщений: 9345
ptr128
Вы очень захотели знать, по какому признаку можно узнать, использована будет tempdb при CTE запросе или нет.
Читайте внимательно вопрос и не пытайтесь уйти в сторону - меня интересует признак "нераскрываемости" CTE. Т.е., признак того, что результат CTE где-то материализуется.
ptr128
Каким образом это относится к моему утверждению мне совершенно не понятно.
"Объекты CTE, табличных переменных, вложенных запросов и т.п. размещаются в tempdb."
Из всего перечисленного к объектам относятся только табличные переменные. Остальное - ваши фантазии.
ptr128
Я нигде не писал, что "всегда размещаются", или "обязательно размещаются".
Серьезно? А тут - 21051012, 21051358?
ptr128
Мне совершенно не интересны частные случаи когда CTE не используют tempdb, из-за того, что такие случаи имеют нулевую практическую ценность.
Не расписывайтесь за всех.
ptr128
Вашу просьбу "А можете привести пример запроса, который оптимизатор не "разворачивает без CTE"." я удовлетворил.
Где? Пока только словоблудие и попытки уйти от ответов на конкретные вопросы.
ptr128
Вы и так уже признались, что были не в курсе того, что tempdb использует оперативную память, пока ее достаточно и то, что не знали, что CTE, табличные переменные и вложенные запросы размещают создаваемые ими внутренние объекты в tempdb. (Я перефразировал фразу "Объекты CTE, табличных переменных, вложенных запросов...", так как Вы признались, что у Вас проблемы с русским языком и Вы искренне считаете CTE, переменные и запросы внутренними объектами SQL)
Да-да. И это мы еще не перешли к вопросу про житиё tempdb в in-memory OLTP. Там моя вопиющая безграмотность проявится еще ярче...
И особенно интересно узнать, где свои "внутренние объекты" размещают "невложенные" запросы? Наверное в секретном месте...
ptr128
Короче, или по теме, или общайтесь сами с собой.
Клиент слился... Почему-то неудивительно.
ptr128
И обучать того, кто учиться не желает тоже не собираюсь.
Прежде чем кого-то обучать, неплохо самому изучить предмет преподавания. А вы даже общепринятой терминологией не владеете. Так что обучателем премудростям CTE вам не стать, увы.

ЗЫ: Не пытайтесь сохранить лицо, неся полнейший бред. Эффект ровно противоположный - выглядете еще большим идиотом.
21 дек 17, 23:11    [21053986]     Ответить | Цитировать Сообщить модератору
 Re: Вложенный запрос  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 398
invm
меня интересует [...] признак того, что результат CTE где-то материализуется.

Ну и интересуйтесь. Я тут при чем? Мне достаточно того, что объект, создаваемый CTE "материализуется" в иерархическом запросе, что я, кстати, доказал.
Table '[b]Worktable[/b]'. Scan count [b]2[/b], logical reads [b]55[/b], physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'MyEmployees'. Scan count 2, logical reads 21, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.


invm
ptr128
"Объекты CTE, табличных переменных, вложенных запросов и т.п. размещаются в tempdb."

Из всего перечисленного к объектам относятся только табличные переменные.

Я в шоке! То есть Вы и вправду относитесь к тем, кто
ptr128
"в фразе "Объекты строительства" считают само строительство объектом."


invm
ptr128
Я нигде не писал, что "всегда размещаются", или "обязательно размещаются".
Серьезно? А тут - 21051012, 21051358?

У Вас галлюцинации? Найдите там слова "всегда" или "обязательно". Можно с трех попыток )))

invm
ptr128
Мне совершенно не интересны частные случаи когда CTE не используют tempdb, из-за того, что такие случаи имеют нулевую практическую ценность.
Не расписывайтесь за всех.

Выделите, пожалуста, в моей фразе слово "всех" )))

invm
ptr128
Вашу просьбу "А можете привести пример запроса, который оптимизатор не "разворачивает без CTE"." я удовлетворил.
Где?

Глаза протрите! Второй запрос в посте 21053346 после фразы "Если же использовать CTE "по назначению"..."

invm
Пока только словоблудие

Вот уж точно вы про себя )))
invm
и попытки уйти от ответов на конкретные вопросы.

Извините, но если среди Вашего "словоблудия" и был конкретный вопрос, то я его пропустил. Пожалуйста, повторите его. Если он будт по теме - я на него отвечу. Но именно вопрос, а не просьба провести какие-то эксперименты или обучить Вас различать CTE запросы, создающие временные объекты в tempdb, от тех, которые такие запросы не создают.

invm
к вопросу про житиё tempdb в in-memory OLTP.

Вот тут я соглашусь что погорячился и был не прав. MS под словосочетанием "in-memory OLTP" сейчас понимает совершенно отдельную компоненту внутри SQL сервера, несмотря на то, что ранее средства кеширования в памяти tempdb он тем же самым словосочетанием называл.
21 дек 17, 23:58    [21054028]     Ответить | Цитировать Сообщить модератору
 Re: Вложенный запрос  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 398
alexeyvg
ptr128
Это не мой запрос.)))
Ваш - я имел в виду тот запрос, который вы привели.

Выделите, пожалуйста, в нем слово HASH:
-- Create an Employee table.  
CREATE TABLE dbo.MyEmployees  
(  
EmployeeID smallint NOT NULL,  
FirstName nvarchar(30)  NOT NULL,  
LastName  nvarchar(40) NOT NULL,  
Title nvarchar(50) NOT NULL,  
DeptID smallint NOT NULL,  
ManagerID int NULL,  
 CONSTRAINT PK_EmployeeID PRIMARY KEY CLUSTERED (EmployeeID ASC)   
);  
-- Populate the table with values.  
INSERT INTO dbo.MyEmployees VALUES   
 (1, N'Ken', N'Sánchez', N'Chief Executive Officer',16,NULL)  
,(273, N'Brian', N'Welcker', N'Vice President of Sales',3,1)  
,(274, N'Stephen', N'Jiang', N'North American Sales Manager',3,273)  
,(275, N'Michael', N'Blythe', N'Sales Representative',3,274)  
,(276, N'Linda', N'Mitchell', N'Sales Representative',3,274)  
,(285, N'Syed', N'Abbas', N'Pacific Sales Manager',3,273)  
,(286, N'Lynn', N'Tsoflias', N'Sales Representative',3,285)  
,(16,  N'David',N'Bradley', N'Marketing Manager', 4, 273)  
,(23,  N'Mary', N'Gibson', N'Marketing Specialist', 4, 16);  
WITH DirectReports(ManagerID, EmployeeID, Title, EmployeeLevel) AS   
(  
    SELECT ManagerID, EmployeeID, Title, 0 AS EmployeeLevel  
    FROM dbo.MyEmployees   
    WHERE ManagerID IS NULL  
    UNION ALL  
    SELECT e.ManagerID, e.EmployeeID, e.Title, EmployeeLevel + 1  
    FROM dbo.MyEmployees AS e  
        INNER JOIN DirectReports AS d  
        ON e.ManagerID = d.EmployeeID   
)  
SELECT ManagerID, EmployeeID, Title, EmployeeLevel   
FROM DirectReports  
ORDER BY ManagerID;  


alexeyvg
Может, я что то пропустил, я просто смотрю на эти фразы:
ptr128
Он от момента рождения CTE так и делал. Попробуйте прогнать CTE на большим объемом данных и понаблюдайте за Tempdb
и
ptr128
Объекты CTE, табличных переменных, вложенных запросов и т.п. размещаются в tempdb.


Явно пропустили. Где тут сказано, что всегда или обязательно? Да, внутренние объекты SQL сервера, создаваемые при использовании CTE "размещал" и "размещаются" в tempdb. Если CTE, вложенные запросы и т.п. объектов не создают, то и размещать нечего. Или Вы опять будете требовать от меня извинений за то, что считаете "строительство" объектом? Ну пожалуйтта, ну проститете! )))

alexeyvg
ptr128
can use internal objects to store intermediate results for hash joins, hash aggregates, or sorting.

В которой тоже не говорится, что CTE и вложенные запросы - объекты, хранимые в tempdb, а всего лишь то, что выполнение этого может потребовать использовать tempdb

Во-первых, в оригинале эта фраза звучала, как
ptr128
Queries that contain SELECT, INSERT, UPDATE, and DELETE statements can use internal objects to store intermediate results for hash joins, hash aggregates, or sorting.

Даже слова CTE в ней не было. Потому что она совсем из другой строки таблицы по ссылке.
Во-вторых, действительно, не любой запрос, содержащий "SELECT, INSERT, UPDATE, and DELETE" будет создавать "internal objects" и хранить их в tempdb. Для этого, у него, как минимум, должна возникнуть необходимость такой объект создать. А одно из необходимых (но не достаточное!) условий, для того, чтобы такой объект создался, как раз и есть "вложенный запрос". К которому цитата и относилась. 21051662

alexeyvg
Тут собрались люди, достаточно хорошо знающие сиквел, почитывающие блоги писателей ядра сиквела, и даже заходят те, кто сами пишет об этом книги, и им режет взгляд такая вольная интерпретация.

О господи! А уже подумал, что Вы хоть что-то понимаете в обсуждаемом вопросе. А Вы вдруг, как дите малое решили пиписьками меряться )))
22 дек 17, 00:17    [21054041]     Ответить | Цитировать Сообщить модератору
 Re: Вложенный запрос  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36965
Модератор: Уважаемый ptr128! Не могли бы вы к вашим оппонентам чуть-чуть с большим уважением относиться? Ну, чтобы профилактические баны не пришлось выписывать.

Спасибо за понимание.

Модератор: UPD: в этой теме это качается не только лишь некоторых. Давайте жить дружно, все дела.


Сообщение было отредактировано: 22 дек 17, 02:05
22 дек 17, 01:03    [21054073]     Ответить | Цитировать Сообщить модератору
 Re: Вложенный запрос  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 398
alexeyvg
Тут собрались люди, достаточно хорошо знающие сиквел, почитывающие блоги писателей ядра сиквела, и даже заходят те, кто сами пишет об этом книги, и им режет взгляд такая вольная интерпретация.

Приношу публично извинения за "пиписьками меряться". Вы меня не оскорбляли, в отличии от некоторых. Поэтому считаю, что я явно погорячился. Но мериться регалиями с незнакомыми людьми, право, не стоит.

Так же считаю эту тему закрытой. Несмотря на обилие постов, почему-то, почти никто кроме меня не приводил никаких доказательств своих утверждений, что загадило тему флудом и догматизмом.

Все, что я хотел донести, так это то, что при использовании CTE, табличных переменных и вложенных запросов, MS SQL не предоставляет возможности индексации результирующего набора данных. Что может привести (на больших объемах данных и сложных запросах) к худшей производительности, чем при явном использовании временных таблиц с разумно созданными индексами.

Если кто-то с этим не согласен - мне, по большому счету, безразлично. Жаль только тех, кто почитав весь этот прессинг на меня решит, что CTE, табличные переменные и вложенные запросы можно смело использовать на терабайтных БД и миллиардах записей.

Желающие могут дальше придираться к словам, стилическим и синтаксическим ошибкам и даже к конкретным буквам )))
22 дек 17, 02:25    [21054124]     Ответить | Цитировать Сообщить модератору
 Re: Вложенный запрос  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3247
ptr128
Все, что я хотел донести, так это то, что при использовании CTE, табличных переменных и вложенных запросов, MS SQL не предоставляет возможности индексации результирующего набора данных.
Табличные переменные индексировать можно:
declare @t table (Id int primary key);
В зависимости от версии сиквела и поведения оптимизатора, такая добавка может очень сильно улучшить ситуацию.

Ваша проблема в том, что вы, со своими терабайтными объемами, зачем-то пришли в раздел форума, в котором, если явно не сказано иное, по умолчанию подразумевается OLTP-нагрузка. Т.е. точечные запросы. Вы уже второй олапер, за последнее время, кто приходит сюда и начинает мудро вещать, основываясь на своих умолчаниях. Именно этим обусловлена такая реакция профессионалов.
22 дек 17, 06:09    [21054160]     Ответить | Цитировать Сообщить модератору
 Re: Вложенный запрос  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 398
Ennor Tiegael
Табличные переменные индексировать можно:[src]
declare @t table (Id int primary key);

Простите, у меня язык не повернулся назвать это возможностью индексирования. Это все же, скорее, ограничение (constraint). Да, это частный случай индексирования, но его возможности настолько уступают возможностям CREATE INDEX, что, лично для меня, этого уже достаточно для того, чтобы отказаться от использования табличных переменных. Благо временной таблицей их заменить можно всегда.

Ennor Tiegael
Именно этим обусловлена такая реакция профессионалов.

И это Вы называете "реакцией профессионалов"? )))
TaPaK
как же таких sql то терпит....
дарагуля и де там про жизнь в оперативке?
упоротые бараны больше всего веселят
22 дек 17, 09:03    [21054261]     Ответить | Цитировать Сообщить модератору
 Re: Вложенный запрос  [new]
TaPaK
Member

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

автор
Благо временной таблицей их заменить можно всегда.

дарагуля, давай пример замены в функции? Или как всегда скажешь, что не то имел ввиду?
22 дек 17, 09:08    [21054269]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 [4] 5 6   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить