|
|
|
хитрый join и group by
|
|||
|---|---|---|---|
|
#18+
можно ли построить join так что бы не используя group by в with b as ... и в with c получить результат не 1, 12, 9 а 1, 6 и 3 хочу начать с неправильного запроса: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. который дает неправильный результат такой:aсумма bсумма С1129 видно что в B задвоилось на количество строк в С и в С задвоилось на количество строк в Б НАДО что бы получился правильный результат без задвоений aсумма bсумма С163 пример: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. но в очень большом примере каждый лишний group by съедает много actual time (таблицы очень большие) может быть есть такой вариант join что бы группировка и агрегатные вычисления делались только 1 раз и дали правильный результат? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2016, 17:11 |
|
||
|
хитрый join и group by
|
|||
|---|---|---|---|
|
#18+
Legushka, подзапросы никто не отменял: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2016, 17:41 |
|
||
|
хитрый join и group by
|
|||
|---|---|---|---|
|
#18+
Alexius, решение гуд, но хочется узнать есть ли решение на джоинах? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2016, 08:02 |
|
||
|
хитрый join и group by
|
|||
|---|---|---|---|
|
#18+
пробовал через подзапросы, в итоге даже намного дольше стало, решил вернуться к первоначальному и еще раз проанализировать почему я хотел уйти от группировок может быть дело не в запросе а в выделенной памяти?, как можно посмотреть сколько памяти отведено для работы со временными таблицами? часть запроса и план: есть временная таблица wpc_per где куча полей с ИД и суммовых полей и есть wpc_per_sum которая на основе собирает суммы в разрезе одного параметра Код: 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. 37. по плану видно что группировка на основе полученных данных выполняется даже больше чем получение данных может быть памяти мало? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2016, 09:53 |
|
||
|
хитрый join и group by
|
|||
|---|---|---|---|
|
#18+
Legushka, много лишних букв. за лесом сложно разгледеть, что собствнно, нужно. джоин двух подзапоосов с груп бай? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2016, 10:21 |
|
||
|
хитрый join и group by
|
|||
|---|---|---|---|
|
#18+
p2., понять почему очень долго выполняется запрос где сперва во временную таблицу накидали значений а потом создаем еще одну временную таблицу куда кидаем группировку и суммы на основании первой временной таблицы и эта вторая таблица в итоге работает в 2 раза дольше чем формирование первой? что можно сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2016, 10:35 |
|
||
|
хитрый join и group by
|
|||
|---|---|---|---|
|
#18+
Legushka, SQL исполняется в определённой последовательности, которая совпадает с порядком следования основных слов в синтаксисе: Код: plaintext 1. 2. 3. 4. 5. Таблицы сначала связываются, потом результат группруется. Вот данные после связки: Код: sql 1. 2. 3. 4. 5. 6. 7. Как видно, дубликаты появляются по результатам связывания таблиц и избавиться от них только связками не выйдет. Тут можно только один агрегат засунуть в подзапрос, скажем в `c`, возможно станет быстрее: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. В приведённом плане большую часть времени занимает плучение данных, т.к. начало группировки начинается через 13.4 секунды: Код: sql 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2016, 10:36 |
|
||
|
хитрый join и group by
|
|||
|---|---|---|---|
|
#18+
vyegorovLegushka, <> В приведённом плане большую часть времени занимает плучение данных, т.к. начало группировки начинается через 13.4 секунды: Код: sql 1. 2. как мне недавно объяснили, возможно даже вы -- это время до отдания первой строки хеш--агрегатом. Условно можно считать , что первичная (не из СТЕ) вычитка данных завершилась одновременно с мерджем. (если все там сделано по уму --- оно должно и мерджить и начинать размещать в хеш таблицу "на проходе" -- т.е. в момент профетчивания -- сиречь -- вычитки). что тоже неверно. А так там прямо написано -- последняя запись индекс сканами получена в 1125.851 , а мердж задержался до 3294.815, потом началось сканирование материализованного СТЕ, с параллельным (конвейер, как я догадываюсь) хеш--джойном, которое завершилось в 10511.509, с момента отдачи первой записи хеш--джойном [7338.802] _уже_ (по уму) должно начаться хеш--агрегироование (как процесс), которое просто по определению не могло _вернуть_ первую запись раньше, чем к нему пришла последняя из конвеера -- 10511.509 . как--то так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2016, 11:02 |
|
||
|
хитрый join и group by
|
|||
|---|---|---|---|
|
#18+
p2.Legushka, много лишних букв. за лесом сложно разгледеть, что собствнно, нужно. джоин двух подзапоосов с груп бай? вот плюсану -- совершенно не важно, сколько выполняется запрос, результат которого вам не нужен. важно понять, что именно вам нужно, и думать вокруг оптимизации именно этого. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2016, 11:07 |
|
||
|
хитрый join и group by
|
|||
|---|---|---|---|
|
#18+
qwwq, Также как и в случае с HashJoin сначала строиться хэш таблица на все данные , так же и тут — пока не будет построена таблица по всем данным, аггрегация не начнётся. Разница между окончанием работы с данными `11868.782` и началом агрегации `13485.463` похожа на время создания таблицы. P.S. Пруфов нет под рукой, так что могу и наврать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2016, 11:07 |
|
||
|
хитрый join и group by
|
|||
|---|---|---|---|
|
#18+
vyegorovqwwq, Также как и в случае с HashJoin сначала строиться хэш таблица на все данные , так же и тут — пока не будет построена таблица по всем данным, аггрегация не начнётся. Разница между окончанием работы с данными `11868.782` и началом агрегации `13485.463` похожа на время создания таблицы. P.S. Пруфов нет под рукой, так что могу и наврать.не "началом агрегации" , а выдачей первой записи из хеш--агрегата. PS вы руками когда--либо агрегировали в хеш таблице ? это типичное агрегирование на проходе -- вы при повторении хеш--ключа уже навариваете значение на ячейках -- агрегатах. Если по уму делать, конечно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2016, 11:13 |
|
||
|
хитрый join и group by
|
|||
|---|---|---|---|
|
#18+
qwwq, Я не уверен, что результаты `CTE Scan on wpc_per` можно сразу использовать как хэш-таблицу. Мне кажется, что запрос исполняется так: 1. Хэш по результатам слияния 2. Хэш-объединение с `CTE Scan on Woperation` (до конца, без ковейера выше) 3. Хэш по результатам из #2 (в плане не показан) 4. Хэш-группировка ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2016, 12:47 |
|
||
|
хитрый join и group by
|
|||
|---|---|---|---|
|
#18+
vyegorovТут можно только один агрегат засунуть в подзапросчем второй не угодил? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2016, 12:54 |
|
||
|
хитрый join и group by
|
|||
|---|---|---|---|
|
#18+
p2.vyegorovТут можно только один агрегат засунуть в подзапросчем второй не угодилОдин подзапрос с агрегатом, ещё один как есть. Внешний запрос тоже с агрегатом. Либо два запроса с агрегатами, потом объединить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2016, 13:07 |
|
||
|
хитрый join и group by
|
|||
|---|---|---|---|
|
#18+
vyegorov, что показано, а что нет, и как производится хеш агрегирование (с исчислением хеша на том же проходе, что и агрегирование в ячейках хеш--агрегата) -- давайте оставим. тут надо в код лезть, а я в си не ходок. я думаю проблема автора в том, что он материализует довольно большие наборы, не задумываясь о том, что это дисковые операции. а надо бы максимально их сворачивать при первой материализации, а то, что не сворачиваемо, писать подзапросом, а не ЦТЕ, который всегда материализует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2016, 13:12 |
|
||
|
хитрый join и group by
|
|||
|---|---|---|---|
|
#18+
qwwq, подскажите, плз, что понимается под сворачиваемыми, максимальным сворачиванием, материализацией. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2016, 15:10 |
|
||
|
хитрый join и group by
|
|||
|---|---|---|---|
|
#18+
Legushkaqwwq, подскажите, плз, что понимается под сворачиваемыми, максимальным сворачиванием, материализацией. правильнее (про первые 2) сказать что я понимаю. сворачивание по измерению[ям] -- группировка по ним с результирующим уменьшением (обычно на несколько порядков) количества строк результата. [тут сворачиваются прочие измерения, если есть] а материализация -- это материализация -- ваш набор строк становится не инструкцией, для его получения, а размещается материально либо в памяти, либо на диске (если не в какие ворота). текущая реализация СТЕ в пж реализовано именно через т.н. "темпл тейбл" -- материальный набор строк. Что плохо, когда он вам нужен просто как многокрано повторяемая в тексте одна и та же инструкция. (т.е. подзапрос). понятно, что чем меньше вам надо разместить где--то строк -- тем лучше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2016, 15:18 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=39178480&tid=1997407]: |
0ms |
get settings: |
6ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
80ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
68ms |
get tp. blocked users: |
1ms |
| others: | 234ms |
| total: | 424ms |

| 0 / 0 |
