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

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

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

дарагуля, давай пример замены в функции? Или как всегда скажешь, что не то имел ввиду?

Детка, давай пример, опровергающий мое утверждение, или умолкни )))
22 дек 17, 09:13    [21054284]     Ответить | Цитировать Сообщить модератору
 Re: Вложенный запрос  [new]
TaPaK
Member

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

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

дарагуля, давай пример замены в функции? Или как всегда скажешь, что не то имел ввиду?

Детка, давай пример, опровергающий мое утверждение, или умолкни )))

рыбка, я ж и говорю что ты опять несёшь чушь, что тут опровергать
22 дек 17, 09:17    [21054290]     Ответить | Цитировать Сообщить модератору
 Re: Вложенный запрос  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31355
ptr128
Явно пропустили. Где тут сказано, что всегда или обязательно? Да, внутренние объекты SQL сервера, создаваемые при использовании CTE "размещал" и "размещаются" в tempdb. Если CTE, вложенные запросы и т.п. объектов не создают, то и размещать нечего.
Опять "создаваемые при использовании CTE" :-)

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

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

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

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

Просто смешно выглядит, мы тут перетираем с 2000 года работу сервера с tempdb в самых разных ситуациях, в разных версиях, чуть ли не раз в неделю (ну хорошо, раз в месяц). Представляете, 17 лет постоянно обсуждаем, аж в зубах скрипят эти объекты в tempdb. Я уже отвечаю на эти темы не сразу, надоело, 10 лет назад бы подхватил топик в течении 5 минут.
И тут приходит ptr128, и выдаёт такое :-)
22 дек 17, 09:19    [21054295]     Ответить | Цитировать Сообщить модератору
 Re: Вложенный запрос  [new]
Goga-Gola
Guest
[quot alexeyvg]
ptr128
И тут приходит ptr128, и выдаёт такое :-)


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

Откуда: Moscow
Сообщений: 398
alexeyvg
Просто смешно выглядит, мы тут перетираем с 2000 года

А мне еще смешнее, так как я с удовольствием перешел с IDMS на DB/2 в 1989-ом, а свой первый интерпретатор SQL, естественно упрощенный, написал на C в 1995-ом. )))

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


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

смысла в продолжении общения просто нет.
22 дек 17, 09:42    [21054362]     Ответить | Цитировать Сообщить модератору
 Re: Вложенный запрос  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31355
Goga-Gola
alexeyvg
И тут приходит ptr128, и выдаёт такое :-)

И "мэтры" начинают изъясняться языком школьников-дегенератов... "Дом-2" устроили...
Все "мэтры" вдруг поменяли язык? Или один-два человека ляпнули?
В этом топике хватает и нормального обсуждения. "Дом-2" от кого то невоспитанного не отменяет "И тут приходит ptr128, и выдаёт такое :-)"

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


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

И главное, не факт ошибки (у меня на форуме горы ошибок), а упорное отстаивание явного ляпа.
Надо было просто сказать: ой, ошибся, не так понял прочитанную статью, не CTE неявно создаёт временные таблицы, а определённые операторы исполнения в database engine. И всё, сразу видно - человек знает, что мало знает, значит, профессионал.
22 дек 17, 09:52    [21054386]     Ответить | Цитировать Сообщить модератору
 Re: Вложенный запрос  [new]
alexeyvg
Member

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


отказались аргументировать свои утверждения:
ptr128
приведите доказательство того, что "обычный запрос из одной таблицы [...] без группировок" размещает внутренний объект в tempdb. И без сортировки, пожалуйста )
Выделите, пожалуйста, в нем слово HASH:
Где тут сказано, что всегда или обязательно?
Ээээ, про слово HASH бездоказательно???
Вот 2 запроса с worktable
;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
;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? Две временные таблицы неявно Вы создаете - это потеря производительности. А выигрыш в чем?
22 дек 17, 09:57    [21054396]     Ответить | Цитировать Сообщить модератору
 Re: Вложенный запрос  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31355
alexeyvg
Теперь перечитываем утверждение, которое вы отстаиваете:
ptr128
Для чего в этой задаче CTE? Две временные таблицы неявно Вы создаете - это потеря производительности. А выигрыш в чем?
Ещё раз, мы обсуждаем именно это ваше утверждение.

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

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

Вот это мы тут говорим, и именно подтверждение или опровержение этого мы ищем в предоставленных вами ссылках, и ничто другое, никакие другие условия или признаки создания временных объектов.
22 дек 17, 10:05    [21054406]     Ответить | Цитировать Сообщить модератору
 Re: Вложенный запрос  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 940
Жара, мать иё! А задача ТСа так и не решена!
Клиенты не платят - бизнес страдает!
22 дек 17, 10:13    [21054435]     Ответить | Цитировать Сообщить модератору
 Re: Вложенный запрос  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 398
ptr128
Для чего в этой задаче CTE? Две временные таблицы неявно Вы создаете - это потеря производительности. А выигрыш в чем?

Я могу согласиться с тем, что фраза была высказана излишне категорично. К тому же уже доказано было выше, что использование синтаксиса CTE не всегда приводит к созданию временных таблиц. Ну или, как Вы выражаетесь, "не всегда приводит к тому, что определенные операторы исполнения в database engine создают временные таблицы". Был не прав. Привык гонять своих разработчиков кратко. Благо живых примеров такого кода на продуктивных базах клиентов, хоть завались, и продемонстрировать разницу - минута. Надо было сразу писать что-то вроде "Написание запросов при помощи CTE может привести (а при разработке и развитии продукта - точно приведет) к неявному созданию неиндексированных объектов в tempdb, что приведет к потере производительности, по сравнению с использованием временных таблиц с разумными индексами". Или не писать вообще - пусть у конкурентов все работает медленней )

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

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


alexeyvg
не CTE неявно создаёт временные таблицы, а определённые операторы исполнения в database engine.

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

Лично я не вижу. Поэтому, если бы Вы попросили уточнить мою фразу, так как она Вам непонятна, то сразу же получили бы последний вариант. Вы же предпочли придраться к словам и интерпретировать мою фразу исключительно одним способом, удобным для Вас. Даже не смотря на то, что и Вы и я в курсе, что CTE - не более чем синтаксическая конструкция.
22 дек 17, 10:22    [21054457]     Ответить | Цитировать Сообщить модератору
 Re: Вложенный запрос  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 398
alexeyvg
Ээээ, про слово HASH бездоказательно???
Вот 2 запроса с worktable

Убедительная просьба прекратить нагло врать! Скриншот сюда. Чтобы было видно, что это я написал, а не отковотил то, что написал кто-то другой.
22 дек 17, 10:24    [21054466]     Ответить | Цитировать Сообщить модератору
 Re: Вложенный запрос  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 398
Руслан Дамирович
Жара, мать иё! А задача ТСа так и не решена!
Клиенты не платят - бизнес страдает!

После поста 21053000 он молчит. Видимо, все получилось.
22 дек 17, 10:28    [21054477]     Ответить | Цитировать Сообщить модератору
 Re: Вложенный запрос  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31355
ptr128
alexeyvg
"ключевое слово WITH автоматически созадёт временную таблицу на каждое написание".

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

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

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

ptr128
alexeyvg
не CTE неявно создаёт временные таблицы, а определённые операторы исполнения в database engine.

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

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

Да вы прямо про это пишите, процитирую в сотый раз:
ptr128
Для чего в этой задаче CTE? Две временные таблицы неявно Вы создаете - это потеря производительности. А выигрыш в чем?
22 дек 17, 10:43    [21054524]     Ответить | Цитировать Сообщить модератору
 Re: Вложенный запрос  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31355
ptr128
Надо было сразу писать что-то вроде "Написание запросов при помощи CTE может привести (а при разработке и развитии продукта - точно приведет) к неявному созданию неиндексированных объектов в tempdb, что приведет к потере производительности, по сравнению с использованием временных таблиц с разумными индексами"
Жесть, но это же не связано, мы это уже обсуждаем очень долго :-)

Переписывание "без CTE" сделает абсолютно идентичный план запроса, с использованием worktable или без использования - вот прямо как было, так и останется.
ptr128
Привык гонять своих разработчиков кратко
Бедолаги :-) Пыхтят, убирают CTE, потому что начальнику не нравится, но картинка с планом остаётся абсолютно такая же :-) Самодур :-)
22 дек 17, 10:47    [21054543]     Ответить | Цитировать Сообщить модератору
 Re: Вложенный запрос  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
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 - объекты, которые были созданы при использовании синтаксиса СТЕ не всегда размещаются в темпбд.

В общем, поздравляем вас соврамши, гражданин "я-писал-интерпретатор-пока-вы-в-ясли-ходили"
22 дек 17, 10:48    [21054546]     Ответить | Цитировать Сообщить модератору
 Re: Вложенный запрос  [new]
Cammomile
Member

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

Поменять на
: {Мы не знаем , является ли СТЕ "типом" в обычно понимании, но очевидно, что СТЕ это некий механизма, который может породить создание каких-то объектов. Эти объекты всегда размещаются в tempdb }
22 дек 17, 10:53    [21054562]     Ответить | Цитировать Сообщить модератору
 Re: Вложенный запрос  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 398
alexeyvg
но картинка с планом остаётся абсолютно такая же

ptr128
по сравнению с использованием временных таблиц с разумными индексами"

Вы действительно утверждаете, что план запроса не зависит от индексов???? Занавес...
22 дек 17, 10:57    [21054576]     Ответить | Цитировать Сообщить модератору
 Re: Вложенный запрос  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31355
ptr128
alexeyvg
но картинка с планом остаётся абсолютно такая же

ptr128
по сравнению с использованием временных таблиц с разумными индексами"

Вы действительно утверждаете, что план запроса не зависит от индексов???? Занавес...
Жесть. Я обсуждаю ваше высказывание про CTE, при чём тут индексы?
22 дек 17, 11:02    [21054601]     Ответить | Цитировать Сообщить модератору
 Re: Вложенный запрос  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 398
Cammomile
Но займемся семантикой. Сиречь значением слов.

Cammomile
слышать такое от гуманитария

Но тогда почему Вы сами рассуждаете, как гуманитарий? Я действительно не расчитывал, что мою фразу будет читать гуманитарий, да еще и не знающий,
ptr
что CTE - не более чем синтаксическая конструкция.


Cammomile
СТЕ является типом объектов

А в фразе "объекты строительства, транспорта и благоустройства" строительство, транспорт и благоустройство тоже является, по Вашему, типом объектов? )))
22 дек 17, 11:04    [21054608]     Ответить | Цитировать Сообщить модератору
 Re: Вложенный запрос  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 398
alexeyvg
ptr128
Вы действительно утверждаете, что план запроса не зависит от индексов???? Занавес...
Жесть. Я обсуждаю ваше высказывание про CTE, при чём тут индексы?

Я уже говорил неоднократно.
ptr128
при использовании CTE, табличных переменных и вложенных запросов, MS SQL не предоставляет возможности индексации результирующего набора данных. Что может привести (на больших объемах данных и сложных запросах) к худшей производительности, чем при явном использовании временных таблиц с разумно созданными индексами.
22 дек 17, 11:07    [21054619]     Ответить | Цитировать Сообщить модератору
 Re: Вложенный запрос  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 398
alexeyvg
ptr128
Надо было сразу писать что-то вроде "Написание запросов при помощи CTE может привести (а при разработке и развитии продукта - точно приведет) к неявному созданию неиндексированных объектов в tempdb, что приведет к потере производительности, по сравнению с использованием временных таблиц с разумными индексами"
Жесть, но это же не связано

Что это и с чем не связано?
Или мне, последовать Вашему примеру и самому придумать, что таоке "это" и с "чем" оно не связано. Ну, например, Ваша лживость (где скриншот?) и акоголизм )))
22 дек 17, 11:26    [21054704]     Ответить | Цитировать Сообщить модератору
 Re: Вложенный запрос  [new]
iiyama
Member

Откуда:
Сообщений: 642
Господа, Сергей Алексеевич уже попросил быть более сдержанными. Вы уже 5 страниц толчёте воду в ступе. Пользы от топика =0,01% с учетом того что автор исчез(вроде бы довольным)
ПиЭс. Топик сделал мне пятницу, но лучше закрыть его
22 дек 17, 11:28    [21054706]     Ответить | Цитировать Сообщить модератору
 Re: Вложенный запрос  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 398
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.

Это ровно то, что я и утверждал изначально.
22 дек 17, 11:37    [21054733]     Ответить | Цитировать Сообщить модератору
 Re: Вложенный запрос  [new]
Rismen
Member

Откуда:
Сообщений: 11
ptr128
Rismen
пропущено...


Если открыть бд, то в таблице Residency столбце PriceOfResidency полная стоимость за проживание. В таблице Payment столбце Pay сколько оплачено. И нужно вывести тех клиентов, которые либо не заплатили, либо оплатили частично.

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

Еще раз запрос, с исправленным именем поля:
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

Спасибо, запрос выдаёт нужных клиентов, но только цифры не те
22 дек 17, 12:33    [21054888]     Ответить | Цитировать Сообщить модератору
 Re: Вложенный запрос  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 398
Rismen
Спасибо, запрос выдаёт нужных клиентов, но только цифры не те

База у меня есть. Уточните, что не так с цифрами, pls.
22 дек 17, 12:34    [21054892]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 4 [5] 6   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить