powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вложенный запрос
25 сообщений из 126, страница 5 из 6
Вложенный запрос
    #39574200
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKptr128,

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

дарагуля, давай пример замены в функции? Или как всегда скажешь, что не то имел ввиду?
Детка, давай пример, опровергающий мое утверждение, или умолкни )))
...
Рейтинг: 0 / 0
Вложенный запрос
    #39574202
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ptr128TaPaKptr128,

пропущено...

дарагуля, давай пример замены в функции? Или как всегда скажешь, что не то имел ввиду?
Детка, давай пример, опровергающий мое утверждение, или умолкни )))
рыбка, я ж и говорю что ты опять несёшь чушь, что тут опровергать
...
Рейтинг: 0 / 0
Вложенный запрос
    #39574204
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ptr128Явно пропустили. Где тут сказано, что всегда или обязательно ? Да, внутренние объекты SQL сервера, создаваемые при использовании CTE "размещал" и "размещаются" в tempdb. Если CTE, вложенные запросы и т.п. объектов не создают, то и размещать нечего.Опять "создаваемые при использовании CTE" :-)

Я вам в очередной раз скажу, что написание или ненаписание волшебного слова CTE совершенно не коррелирует с использованием сервером tempdb.

Мы же вроде это уже выяснили?
ptr128Во-первых, в оригинале эта фраза звучала, как
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 в ней не было.Вот именно, не было.

Мы же обсуждаем ваши "объекты в tempdb, создаваемые запросом CTE", а не что то другое.
ptr128alexeyvgТут собрались люди, достаточно хорошо знающие сиквел, почитывающие блоги писателей ядра сиквела, и даже заходят те, кто сами пишет об этом книги, и им режет взгляд такая вольная интерпретация.
О господи! А уже подумал, что Вы хоть что-то понимаете в обсуждаемом вопросе. А Вы вдруг, как дите малое решили пиписьками меряться )))Ну, "разбираются, читают, пишут", это не только мерянье, но некий показатель знания контекста.

Просто смешно выглядит, мы тут перетираем с 2000 года работу сервера с tempdb в самых разных ситуациях, в разных версиях, чуть ли не раз в неделю (ну хорошо, раз в месяц). Представляете, 17 лет постоянно обсуждаем, аж в зубах скрипят эти объекты в tempdb. Я уже отвечаю на эти темы не сразу, надоело, 10 лет назад бы подхватил топик в течении 5 минут.
И тут приходит ptr128, и выдаёт такое :-)
...
Рейтинг: 0 / 0
Вложенный запрос
    #39574219
Goga-Gola
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot alexeyvg]ptr128И тут приходит ptr128, и выдаёт такое :-)

И "мэтры" начинают изъясняться языком школьников-дегенератов... "Дом-2" устроили...
...
Рейтинг: 0 / 0
Вложенный запрос
    #39574229
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgПросто смешно выглядит, мы тут перетираем с 2000 года
А мне еще смешнее, так как я с удовольствием перешел с IDMS на DB/2 в 1989-ом, а свой первый интерпретатор SQL, естественно упрощенный, написал на C в 1995-ом. )))

Поймите, после того, как Вы начали говорить за всех (в курсе, что за всех говорят только демагоги?):
alexeyvgТут всем известно
все именно так


отказались аргументировать свои утверждения:
ptr128приведите доказательство того, что "обычный запрос из одной таблицы [...] без группировок" размещает внутренний объект в tempdb. И без сортировки, пожалуйста )
Выделите, пожалуйста, в нем слово HASH:
Где тут сказано, что всегда или обязательно?

смысла в продолжении общения просто нет.
...
Рейтинг: 0 / 0
Вложенный запрос
    #39574239
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Goga-GolaalexeyvgИ тут приходит ptr128, и выдаёт такое :-)
И "мэтры" начинают изъясняться языком школьников-дегенератов... "Дом-2" устроили...Все "мэтры" вдруг поменяли язык? Или один-два человека ляпнули?
В этом топике хватает и нормального обсуждения. "Дом-2" от кого то невоспитанного не отменяет "И тут приходит ptr128, и выдаёт такое :-)"

Ой, ну вот, второй пост ptr128 в этом топике:
ptr128Руслан Дамирович
Код: sql
1.
WITH



Для чего в этой задаче CTE? Две временные таблицы неявно Вы создаете - это потеря производительности. А выигрыш в чем?Конечно же, это ещё какой перл, противоречащий всем последующим объяснениям, цитатам и тестам.
Всех резануло это высказывание, по сути - "ключевое слово WITH автоматически созадёт временную таблицу на каждое написание".

И главное, не факт ошибки (у меня на форуме горы ошибок), а упорное отстаивание явного ляпа.
Надо было просто сказать: ой, ошибся, не так понял прочитанную статью, не CTE неявно создаёт временные таблицы, а определённые операторы исполнения в database engine. И всё, сразу видно - человек знает, что мало знает, значит, профессионал.
...
Рейтинг: 0 / 0
Вложенный запрос
    #39574243
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ptr128Поймите, после того, как Вы начали говорить за всех (в курсе, что за всех говорят только демагоги?):
alexeyvgТут всем известно
все именно так


отказались аргументировать свои утверждения:
ptr128приведите доказательство того, что "обычный запрос из одной таблицы [...] без группировок" размещает внутренний объект в tempdb. И без сортировки, пожалуйста )
Выделите, пожалуйста, в нем слово HASH:
Где тут сказано, что всегда или обязательно?Ээээ, про слово HASH бездоказательно???
Вот 2 запроса с worktable
Код: sql
1.
2.
3.
4.
5.
6.
;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

SELECT TOP 1 a.number 
    FROM master..spt_Values a 
        INNER HASH JOIN master..spt_Values b 
        ON a.number = b.number

Вот 2 запроса без worktable
Код: sql
1.
2.
3.
4.
5.
6.
;WITH C(I) AS (SELECT TOP 1 number FROM master..spt_Values ),X AS (SELECT a.I FROM C a INNER JOIN C b ON a.I = b.I) SELECT * FROM x

SELECT TOP 1 a.number 
    FROM master..spt_Values a 
        INNER JOIN master..spt_Values b 
        ON a.number = b.number


Теперь перечитываем утверждение, которое вы отстаиваете:
ptr128Для чего в этой задаче CTE? Две временные таблицы неявно Вы создаете - это потеря производительности. А выигрыш в чем?
...
Рейтинг: 0 / 0
Вложенный запрос
    #39574247
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgТеперь перечитываем утверждение, которое вы отстаиваете:
ptr128Для чего в этой задаче CTE? Две временные таблицы неявно Вы создаете - это потеря производительности. А выигрыш в чем?Ещё раз, мы обсуждаем именно это ваше утверждение.

Придёт какой то начинающий сиквелист, прочитает мнение эксперта ptr128, потом посмотрит на свой код.
- Таак, у меня тут 3 слова CTE, значит, создаются 3 (или 6?) временных таблиц в tempdb

А это не так, наличие или отсутствие CTE никак не коррелдирует с временными объектами, оно зависит от плана выполнения запроса.

Вот это мы тут говорим, и именно подтверждение или опровержение этого мы ищем в предоставленных вами ссылках, и ничто другое, никакие другие условия или признаки создания временных объектов.
...
Рейтинг: 0 / 0
Вложенный запрос
    #39574253
Руслан Дамирович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Жара, мать иё! А задача ТСа так и не решена!
Клиенты не платят - бизнес страдает!
...
Рейтинг: 0 / 0
Вложенный запрос
    #39574257
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ptr128Для чего в этой задаче CTE? Две временные таблицы неявно Вы создаете - это потеря производительности. А выигрыш в чем?
Я могу согласиться с тем, что фраза была высказана излишне категорично. К тому же уже доказано было выше, что использование синтаксиса CTE не всегда приводит к созданию временных таблиц. Ну или, как Вы выражаетесь, "не всегда приводит к тому, что определенные операторы исполнения в database engine создают временные таблицы". Был не прав. Привык гонять своих разработчиков кратко. Благо живых примеров такого кода на продуктивных базах клиентов, хоть завались, и продемонстрировать разницу - минута. Надо было сразу писать что-то вроде "Написание запросов при помощи CTE может привести (а при разработке и развитии продукта - точно приведет) к неявному созданию неиндексированных объектов в tempdb, что приведет к потере производительности, по сравнению с использованием временных таблиц с разумными индексами". Или не писать вообще - пусть у конкурентов все работает медленней )

alexeyvg"ключевое слово WITH автоматически созадёт временную таблицу на каждое написание".

А вот когда слова оппонетна перефразируют по своему разумению - это называется "демагогия".


alexeyvgне CTE неявно создаёт временные таблицы, а определённые операторы исполнения в database engine.
Вы видите принципиальную разницу между фразами?
"Объекты CTE размещаются в tempdb"
"Объекты создаваемые CTE размещаются в tempdb"
"Объекты создаваемые при использоании синтаксиса CTE размещаются в tempdb"
"Объекты создаваемые операторами database engine при использоании синтаксиса CTE размещаются в tempdb"

Лично я не вижу. Поэтому, если бы Вы попросили уточнить мою фразу, так как она Вам непонятна, то сразу же получили бы последний вариант. Вы же предпочли придраться к словам и интерпретировать мою фразу исключительно одним способом, удобным для Вас. Даже не смотря на то, что и Вы и я в курсе, что CTE - не более чем синтаксическая конструкция.
...
Рейтинг: 0 / 0
Вложенный запрос
    #39574263
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgЭэээ, про слово HASH бездоказательно???
Вот 2 запроса с worktable

Убедительная просьба прекратить нагло врать! Скриншот сюда. Чтобы было видно, что это я написал, а не отковотил то, что написал кто-то другой.
...
Рейтинг: 0 / 0
Вложенный запрос
    #39574267
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Руслан ДамировичЖара, мать иё! А задача ТСа так и не решена!
Клиенты не платят - бизнес страдает!
После поста 21053000 он молчит. Видимо, все получилось.
...
Рейтинг: 0 / 0
Вложенный запрос
    #39574278
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ptr128alexeyvg"ключевое слово WITH автоматически созадёт временную таблицу на каждое написание".

А вот когда слова оппонетна перефразируют по своему разумению - это называется "демагогия".Да, это очень доказательно, назвать "демагогией" :-)

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

Ауууу, кто то понял фразу по другому, отзовитесь!!!

ptr128alexeyvgне CTE неявно создаёт временные таблицы, а определённые операторы исполнения в database engine.
Вы видите принципиальную разницу между фразами?
"Объекты CTE размещаются в tempdb"
"Объекты создаваемые CTE размещаются в tempdb"
"Объекты создаваемые при использоании синтаксиса CTE размещаются в tempdb"
"Объекты создаваемые операторами database engine при использоании синтаксиса CTE размещаются в tempdb"

Лично я не вижу. Поэтому, если бы Вы попросили уточнить мою фразу, так как она Вам непонятна, то сразу же получили бы последний вариант. Вы же предпочли придраться к словам и интерпретировать мою фразу исключительно одним способом, удобным для Вас. Даже не смотря на то, что и Вы и я в курсе, что CTE - не более чем синтаксическая конструкция.Я не вижу разницы. Это совершенно идентичные неверные высказывания. Тут просто слово CTE лишнее. Она заставит прочитавшего человека искать CTE (слово WITH), что бы убрать оверхед по созданию временных таблиц. А это неправильно, искать нужно по другим признакам, а не по "WITH"

Да вы прямо про это пишите, процитирую в сотый раз:
ptr128Для чего в этой задаче CTE? Две временные таблицы неявно Вы создаете - это потеря производительности. А выигрыш в чем?
...
Рейтинг: 0 / 0
Вложенный запрос
    #39574281
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ptr128Надо было сразу писать что-то вроде "Написание запросов при помощи CTE может привести (а при разработке и развитии продукта - точно приведет) к неявному созданию неиндексированных объектов в tempdb, что приведет к потере производительности, по сравнению с использованием временных таблиц с разумными индексами"Жесть, но это же не связано, мы это уже обсуждаем очень долго :-)

Переписывание "без CTE" сделает абсолютно идентичный план запроса, с использованием worktable или без использования - вот прямо как было, так и останется.
ptr128Привык гонять своих разработчиков краткоБедолаги :-) Пыхтят, убирают CTE, потому что начальнику не нравится, но картинка с планом остаётся абсолютно такая же :-) Самодур :-)
...
Рейтинг: 0 / 0
Вложенный запрос
    #39574282
Cammomile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ptr128
"Объекты CTE размещаются в tempdb"
"Объекты создаваемые CTE размещаются в tempdb"
"Объекты создаваемые при использоании синтаксиса CTE размещаются в tempdb"
"Объекты создаваемые операторами database engine при использоании синтаксиса CTE размещаются в tempdb"

Лично я не вижу.
Яб согласился слышать такое от гуманитария, но для человека, который делает заявку на то, что он профессиональный программист - это вопиющая безграмотность. Я могу только удивляться тому, что на таком уровне восприятия реальности у тебя есть какие-то там "твои программисты"

Но займемся семантикой. Сиречь значением слов.
автор"Объекты CTE размещаются в tempdb" : {СТЕ является типом объектов. Когда создается объект типа СТЕ, его метаданные и данные всегда размещаются в tempdb}
автор"Объекты создаваемые CTE размещаются в tempdb" : {Мы не знаем , является ли СТЕ "типом" в обычно понимании, но очевидно, что СТЕ это некий механизма, который может породить создание каких-то объектов. При каких-то условиях, эти объекты могут размещаться в tempdb }
автор"Объекты создаваемые при использоании синтаксиса CTE размещаются в tempdb":{ СТЕ это некая форма записи когда , которая приводит к созданию объектов , которые всегда размещаются в tempdb }
автор"Объекты создаваемые операторами database engine при использоании синтаксиса CTE размещаются в tempdb"
Ну тут смысл аналогичен предыдущему.

Итак, что мы видим? Что поциент а) не видит разницы в принципиально разных высказываниях б) каждое их этих высказываний ложное, потому, что:
1 - СТЕ не является типом, для СТЕ нет экземпляров, соответственно нельзя разместить в темпдб то, чего нет;
2 - СТЕ не создает объектов, объекты создает движок бд, и размещает их в тембдб когда считает нужным;
3 - объекты, которые были созданы при использовании синтаксиса СТЕ не всегда размещаются в темпбд;
4 - объекты, которые были созданы при использовании синтаксиса СТЕ не всегда размещаются в темпбд.

В общем, поздравляем вас соврамши, гражданин "я-писал-интерпретатор-пока-вы-в-ясли-ходили"
...
Рейтинг: 0 / 0
Вложенный запрос
    #39574286
Cammomile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cammomile : {Мы не знаем , является ли СТЕ "типом" в обычно понимании, но очевидно, что СТЕ это некий механизма, который может породить создание каких-то объектов. При каких-то условиях, эти объекты могут размещаться в tempdb }
Поменять на
: {Мы не знаем , является ли СТЕ "типом" в обычно понимании, но очевидно, что СТЕ это некий механизма, который может породить создание каких-то объектов. Эти объекты всегда размещаются в tempdb }
...
Рейтинг: 0 / 0
Вложенный запрос
    #39574289
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgно картинка с планом остаётся абсолютно такая же
ptr128по сравнению с использованием временных таблиц с разумными индексами"
Вы действительно утверждаете, что план запроса не зависит от индексов???? Занавес...
...
Рейтинг: 0 / 0
Вложенный запрос
    #39574300
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ptr128alexeyvgно картинка с планом остаётся абсолютно такая же
ptr128по сравнению с использованием временных таблиц с разумными индексами"
Вы действительно утверждаете, что план запроса не зависит от индексов???? Занавес...Жесть. Я обсуждаю ваше высказывание про CTE, при чём тут индексы?
...
Рейтинг: 0 / 0
Вложенный запрос
    #39574301
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CammomileНо займемся семантикой. Сиречь значением слов.
Cammomileслышать такое от гуманитария
Но тогда почему Вы сами рассуждаете, как гуманитарий? Я действительно не расчитывал, что мою фразу будет читать гуманитарий, да еще и не знающий,
ptrчто CTE - не более чем синтаксическая конструкция.

CammomileСТЕ является типом объектов
А в фразе "объекты строительства, транспорта и благоустройства" строительство, транспорт и благоустройство тоже является, по Вашему, типом объектов? )))
...
Рейтинг: 0 / 0
Вложенный запрос
    #39574306
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgptr128Вы действительно утверждаете, что план запроса не зависит от индексов???? Занавес...Жесть. Я обсуждаю ваше высказывание про CTE, при чём тут индексы?
Я уже говорил неоднократно.
ptr128при использовании CTE, табличных переменных и вложенных запросов, MS SQL не предоставляет возможности индексации результирующего набора данных. Что может привести (на больших объемах данных и сложных запросах) к худшей производительности, чем при явном использовании временных таблиц с разумно созданными индексами.
...
Рейтинг: 0 / 0
Вложенный запрос
    #39574315
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgptr128Надо было сразу писать что-то вроде "Написание запросов при помощи CTE может привести (а при разработке и развитии продукта - точно приведет) к неявному созданию неиндексированных объектов в tempdb, что приведет к потере производительности, по сравнению с использованием временных таблиц с разумными индексами"Жесть, но это же не связано
Что это и с чем не связано?
Или мне, последовать Вашему примеру и самому придумать, что таоке "это" и с "чем" оно не связано. Ну, например, Ваша лживость (где скриншот?) и акоголизм )))
...
Рейтинг: 0 / 0
Вложенный запрос
    #39574316
iiyama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа, Сергей Алексеевич уже попросил быть более сдержанными. Вы уже 5 страниц толчёте воду в ступе. Пользы от топика =0,01% с учетом того что автор исчез(вроде бы довольным)
ПиЭс. Топик сделал мне пятницу, но лучше закрыть его
...
Рейтинг: 0 / 0
Вложенный запрос
    #39574320
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgЖесть. Я обсуждаю ваше высказывание про CTE, при чём тут индексы?
Изучите статью

We recently assisted a global ISV to address a performance issue related to a poor performing recursive CTE (Common Table Expression). The ISV wanted the query that was running in excess of 3 minutes to run in less than 15 seconds on their servers. The end result of our efforts was a 3,600% performance improvement.

Recursive CTE queries do have a reliance on the unique parent/child keys in order to get the best performance.

Это ровно то, что я и утверждал изначально.
...
Рейтинг: 0 / 0
Вложенный запрос
    #39574370
Rismen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ptr128Rismenпропущено...


Если открыть бд, то в таблице Residency столбце PriceOfResidency полная стоимость за проживание. В таблице Payment столбце Pay сколько оплачено. И нужно вывести тех клиентов, которые либо не заплатили, либо оплатили частично.
Я вижу, что клиенты 1,2,3 полностью оплатили.
В запросе я, так как писал его без БД, неправильно указал имя поля. Вместо SUM(ISNULL(P.Payment,0)) должно быть SUM(ISNULL(P.Pay,0))
И запрос честно выдает оставшихся двух клиентов.

Еще раз запрос, с исправленным именем поля:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT C.Surname, SUM(Q.PriceOfResidency)-SUM(Q.Payment) AS Debt
FROM Clients C
JOIN (SELECT R.ClientID, MAX(R.PriceOfResidency) AS PriceOfResidency, SUM(ISNULL(P.Pay,0)) AS Payment
  FROM Residency R
  LEFT JOIN Payment P ON R.ResidencyID=P.ResidencyID
  GROUP BY R.ClientID, R.ResidencyID ) Q
  ON C.ClientID=Q.ClientID
GROUP BY Surname
HAVING ABS(SUM(Q.PriceOfResidency)-SUM(Q.Payment))>0.005


Спасибо, запрос выдаёт нужных клиентов, но только цифры не те
...
Рейтинг: 0 / 0
Вложенный запрос
    #39574372
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RismenСпасибо, запрос выдаёт нужных клиентов, но только цифры не те
База у меня есть. Уточните, что не так с цифрами, pls.
...
Рейтинг: 0 / 0
25 сообщений из 126, страница 5 из 6
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вложенный запрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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