powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вложенный запрос
25 сообщений из 126, страница 4 из 6
Вложенный запрос
    #39573902
Cammomile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
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.

Что-то я не вижу попыток заехать в тембдб. СТЕ есть, а "Объекта СТЕ" в тембдебе нету, миииистикааааа.
...
Рейтинг: 0 / 0
Вложенный запрос
    #39573952
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CammomileЧто-то я не вижу попыток заехать в тембдб. СТЕ есть, а "Объекта СТЕ" в тембдебе нету, миииистикааааа.
Бы ли бы Вы хоть на йоту образованней, то использовали CTE в таком запросе, где его использование оправдано, а не пытались придумать настолько тупой запрос, который оптимизатор спокойно развернул без CTE.
...
Рейтинг: 0 / 0
Вложенный запрос
    #39573957
Cammomile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ого, сначала у него " итак понятно что объект не объект , а данные для запроса".

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

С таким балаболом мастером пера сложно вести предметный разговор...
...
Рейтинг: 0 / 0
Вложенный запрос
    #39573961
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CammomileС таким балаболом мастером пера сложно вести предметный разговор...
Самокритично Вы про себя )
Насколько Тапок есть флудер и дитя бескультурное, но даже он написал с CTE запрос, создающий и Worktable И Workfile )))
...
Рейтинг: 0 / 0
Вложенный запрос
    #39573964
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ptr128CammomileС таким балаболом мастером пера сложно вести предметный разговор...
Самокритично Вы про себя )
Насколько Тапок есть флудер и дитя бескультурное, но даже он написал с CTE запрос, создающий и Worktable И Workfile )))
рыбка, тебе же уже сказали про 0 или уже забыла?
...
Рейтинг: 0 / 0
Вложенный запрос
    #39573974
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKрыбка, тебе же уже сказали про 0 или уже забыла?
А Вам сказали, что если на автомобиле не ездить, то для него и топливо не нужно?
Или про то, что если его толкать или тянуть буксиром, то можно ездить без топлива?
Следует ли из этого, что автомобиль не использует топливо? )))
...
Рейтинг: 0 / 0
Вложенный запрос
    #39574002
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ptr128который оптимизатор спокойно развернул без CTE.А можете привести пример запроса, который оптимизатор не "разворачивает без CTE". Или, хотя бы, какой-нибудь признак в плане выполнения по которому можно понять, что CTE не "развернут".
...
Рейтинг: 0 / 0
Вложенный запрос
    #39574010
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invmptr128который оптимизатор спокойно развернул без CTE.А можете привести пример запроса, который оптимизатор не "разворачивает без CTE". Или, хотя бы, какой-нибудь признак в плане выполнения по которому можно понять, что CTE не "развернут".
Так я же писал:
ptr128Насколько Тапок есть флудер и дитя бескультурное, но даже он написал с CTE запрос, создающий и Worktable И Workfile )))


Вот его запрос:
TaPaK
Код: sql
1.
;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



И он честно выдает:
Код: sql
1.
2.
3.
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 "по назначению", то есть для рекурсивного запроса, взяв образец, например, из
документации :

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
-- 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:

Код: sql
1.
2.
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.
...
Рейтинг: 0 / 0
Вложенный запрос
    #39574041
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ptr128,

Так что есть признак "неразворачиваемости"?
...
Рейтинг: 0 / 0
Вложенный запрос
    #39574046
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invmptr128,

Так что есть признак "неразворачиваемости"?
Вам надо, Вы и исследуйте. Мне уже эта тема изрядно поднадоела. Если дети хотят использовать где ни попадя CTE - пусть используют. Тех, которые прийдут ко мне, сам переучу, продемонстрировав его ущербность на больших объемах данных. А остальные пусть работают на конкурентов )
...
Рейтинг: 0 / 0
Вложенный запрос
    #39574072
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ptr128Вам надо, Вы и исследуйте.Т.е. вы таки почти четыре страницы заливали о том, о чем сами ничего не знаете.ptr128Мне уже эта тема изрядно поднадоелаСамо собой. Так обычно случается, когда нечего ответить на вопросы и аргументы оппонентов.ptr128Тех, которые прийдут ко мне, сам переучу, продемонстрировав его ущербность на больших объемах данных.Только не берите тех, которые смогут раскусить вашу собственную ущербность в данном вопросе. Или въедливых, которые будут доставать вопросом "а почему?". Иначе изрядно поднадоест переучивать.
...
Рейтинг: 0 / 0
Вложенный запрос
    #39574082
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ptr128alexeyvg"Объектов CTE и вложенных запросов" просто не существует как явления
Смысл придираться к словам?
По смыслу и так ясно, что речь идет об "объектах создаваемых CTE" и "объектов создаваемых вложенными запросами"Придираюсь? Тут все именно так трактуют ваши слова.

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

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

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

Для сервера нету никаких особых "CTE" и "вложенных запросов", нет операторов database engine для них, есть просто синтаксис "SQL", его семантика после синтаксического анализа преобразуется в операторы обработки множеств, потом оптимизатор из этого делает исполняемые операторы для database engine, он выполняет эти операторы, и если памяти маловато, то он использует для промежуточного хранения tempdb.
...
Рейтинг: 0 / 0
Вложенный запрос
    #39574084
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invmТак обычно случается, когда нечего ответить на вопросы и аргументы оппонентов.
Я не вижу вопросов и аргументов от Вас по интересующей меня теме. В упор.

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

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

Короче, или по теме, или общайтесь сами с собой.
Я Вам ничего не обязан. И обучать того, кто учиться не желает тоже не собираюсь.
...
Рейтинг: 0 / 0
Вложенный запрос
    #39574097
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ptr128Если же использовать CTE "по назначению", то есть для рекурсивного запроса, взяв образец, например, изБоже, ну там же прямое указание использовать tempdb
Выполните то же самое без CTE:
Код: sql
1.
2.
3.
4.
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
...
Рейтинг: 0 / 0
Вложенный запрос
    #39574098
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[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.
...
Рейтинг: 0 / 0
Вложенный запрос
    #39574099
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgБоже, ну там же прямое указание использовать tempdb
Уберите слово HASH из вашего запроса с CTE - и будет без worktable
Это не мой запрос. И вы пропустили развитие тему. Там как раз явно было сказано, что HASH JOIN точно создаст объект в tempdb. )))
...
Рейтинг: 0 / 0
Вложенный запрос
    #39574104
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ptr128alexeyvgБоже, ну там же прямое указание использовать tempdb
Уберите слово HASH из вашего запроса с CTE - и будет без worktable
Это не мой запрос. И вы пропустили развитие тему. Там как раз явно было сказано, что HASH JOIN точно создаст объект в tempdb. )))Ваш - я имел в виду тот запрос, который вы привели.

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

И сравниваем с цитируемой фразой:
ptr128can 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"

Тут собрались люди, достаточно хорошо знающие сиквел, почитывающие блоги писателей ядра сиквела, и даже заходят те, кто сами пишет об этом книги, и им режет взгляд такая вольная интерпретация.
...
Рейтинг: 0 / 0
Вложенный запрос
    #39574105
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 вам не стать, увы.

ЗЫ: Не пытайтесь сохранить лицо, неся полнейший бред. Эффект ровно противоположный - выглядете еще большим идиотом.
...
Рейтинг: 0 / 0
Вложенный запрос
    #39574117
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invmменя интересует [...] признак того, что результат CTE где-то материализуется.
Ну и интересуйтесь. Я тут при чем? Мне достаточно того, что объект, создаваемый CTE "материализуется" в иерархическом запросе, что я, кстати, доказал.
Код: sql
1.
2.
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.



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

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

invmptr128Я нигде не писал, что "всегда размещаются", или "обязательно размещаются".Серьезно? А тут - 21051012 , 21051358 ?
У Вас галлюцинации? Найдите там слова "всегда" или "обязательно". Можно с трех попыток )))

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

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

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

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

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

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

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

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

Вот тут я соглашусь что погорячился и был не прав. MS под словосочетанием "in-memory OLTP" сейчас понимает совершенно отдельную компоненту внутри SQL сервера, несмотря на то, что ранее средства кеширования в памяти tempdb он тем же самым словосочетанием называл.
...
Рейтинг: 0 / 0
Вложенный запрос
    #39574121
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgptr128Это не мой запрос.)))Ваш - я имел в виду тот запрос, который вы привели.

Выделите, пожалуйста, в нем слово HASH:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
-- 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, вложенные запросы и т.п. объектов не создают, то и размещать нечего. Или Вы опять будете требовать от меня извинений за то, что считаете "строительство" объектом? Ну пожалуйтта, ну проститете! )))

alexeyvgptr128can use internal objects to store intermediate results for hash joins, hash aggregates, or sorting.
В которой тоже не говорится, что CTE и вложенные запросы - объекты, хранимые в tempdb, а всего лишь то, что выполнение этого может потребовать использовать tempdb
Во-первых, в оригинале эта фраза звучала, как
ptr128Queries 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Тут собрались люди, достаточно хорошо знающие сиквел, почитывающие блоги писателей ядра сиквела, и даже заходят те, кто сами пишет об этом книги, и им режет взгляд такая вольная интерпретация.
О господи! А уже подумал, что Вы хоть что-то понимаете в обсуждаемом вопросе. А Вы вдруг, как дите малое решили пиписьками меряться )))
...
Рейтинг: 0 / 0
Вложенный запрос
    #39574132
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Модератор: Уважаемый ptr128! Не могли бы вы к вашим оппонентам чуть-чуть с большим уважением относиться? Ну, чтобы профилактические баны не пришлось выписывать.

Спасибо за понимание.
Модератор: UPD: в этой теме это качается не только лишь некоторых. Давайте жить дружно, все дела.
...
Рейтинг: 0 / 0
Вложенный запрос
    #39574144
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgТут собрались люди, достаточно хорошо знающие сиквел, почитывающие блоги писателей ядра сиквела, и даже заходят те, кто сами пишет об этом книги, и им режет взгляд такая вольная интерпретация.
Приношу публично извинения за "пиписьками меряться". Вы меня не оскорбляли, в отличии от некоторых. Поэтому считаю, что я явно погорячился. Но мериться регалиями с незнакомыми людьми, право, не стоит.

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

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

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

Желающие могут дальше придираться к словам, стилическим и синтаксическим ошибкам и даже к конкретным буквам )))
...
Рейтинг: 0 / 0
Вложенный запрос
    #39574158
Фотография Ennor Tiegael
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ptr128Все, что я хотел донести, так это то, что при использовании CTE, табличных переменных и вложенных запросов, MS SQL не предоставляет возможности индексации результирующего набора данных.Табличные переменные индексировать можно:
Код: sql
1.
declare @t table (Id int primary key);

В зависимости от версии сиквела и поведения оптимизатора, такая добавка может очень сильно улучшить ситуацию.

Ваша проблема в том, что вы, со своими терабайтными объемами, зачем-то пришли в раздел форума, в котором, если явно не сказано иное, по умолчанию подразумевается OLTP-нагрузка. Т.е. точечные запросы. Вы уже второй олапер, за последнее время, кто приходит сюда и начинает мудро вещать, основываясь на своих умолчаниях. Именно этим обусловлена такая реакция профессионалов.
...
Рейтинг: 0 / 0
Вложенный запрос
    #39574192
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ennor TiegaelТабличные переменные индексировать можно:[src]
declare @t table (Id int primary key);

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

Ennor TiegaelИменно этим обусловлена такая реакция профессионалов.
И это Вы называете "реакцией профессионалов"? )))
TaPaKкак же таких sql то терпит....
дарагуля и де там про жизнь в оперативке?
упоротые бараны больше всего веселят
...
Рейтинг: 0 / 0
Вложенный запрос
    #39574195
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ptr128,

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

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


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