|
Firebird 2.5 запрос MAX с группировкой
|
|||
---|---|---|---|
#18+
kdv, Прибил индекс, результат: Plan PLAN SORT ((TBL NATURAL)) ------ Performance info ------ Prepare time = 16ms Execute time = 562ms Avg fetch time = 562.00 ms Current memory = 35 662 976 Max memory = 57 806 088 Memory buffers = 2 048 Reads from disk to cache = 934 Writes from cache to disk = 0 Fetches from cache = 771 822 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2018, 13:52 |
|
Firebird 2.5 запрос MAX с группировкой
|
|||
---|---|---|---|
#18+
Alexandr C, ну вот. Как видишь быстрее оказалось ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2018, 13:59 |
|
Firebird 2.5 запрос MAX с группировкой
|
|||
---|---|---|---|
#18+
Симонов Денис, Вот результаты запроса, предложенного KreatorXXI: Plan PLAN (B ORDER TBL_IDX2 INDEX (TBL_IDX1)) PLAN (A NATURAL) ------ Performance info ------ Prepare time = 15ms Execute time = 47ms Avg fetch time = 15.67 ms Current memory = 35 781 144 Max memory = 57 806 088 Memory buffers = 2 048 Reads from disk to cache = 30 Writes from cache to disk = 0 Fetches from cache = 506 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2018, 14:10 |
|
Firebird 2.5 запрос MAX с группировкой
|
|||
---|---|---|---|
#18+
Alexandr C, это ты fetchAll не сделал. Запрос KreatorXXI делает совсем дохрена лишнего. Можно считать его вариант извратом :-) Обрамление внутреннего запроса внешним никогда не даст выигрыша, это нонсенс. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2018, 14:16 |
|
Firebird 2.5 запрос MAX с группировкой
|
|||
---|---|---|---|
#18+
Alexandr C, у вас там что 3 клиента всего? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2018, 14:19 |
|
Firebird 2.5 запрос MAX с группировкой
|
|||
---|---|---|---|
#18+
Симонов ДенисAlexandr C, у вас там что 3 клиента всего? число записей таблицы clients << числа записей таблицы tbl. Ну это и понятно, одно дело таблица справочника клиентов, а другое, например, записи об их заказах. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2018, 14:28 |
|
Firebird 2.5 запрос MAX с группировкой
|
|||
---|---|---|---|
#18+
kdvAlexandr C, это ты fetchAll не сделал. Запрос KreatorXXI делает совсем дохрена лишнего. Можно считать его вариант извратом :-) Обрамление внутреннего запроса внешним никогда не даст выигрыша, это нонсенс. Нет, это был fetchAll ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2018, 14:30 |
|
Firebird 2.5 запрос MAX с группировкой
|
|||
---|---|---|---|
#18+
kdv, забавно, но это воспроизводится DDL Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
Код: sql 1. 2. 3.
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
Код: plaintext 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2018, 14:54 |
|
Firebird 2.5 запрос MAX с группировкой
|
|||
---|---|---|---|
#18+
Такое впечатление, что каждый в этом топике обсуждает что-то своё. В итоге всё сводится к отличию планов PLAN (TBL1 ORDER TBL_IDX1) PLAN (TBL1 ORDER TBL_IDX1 INDEX (TBL_IDX2)) Сейчас ломать голову не буду, но вроде был более простой способ выбрать второй, чем вложенный запрос. Или даже PLAN (TBL1 ORDER TBL_IDX1 INDEX (TBL_IDX1)) для одного композита. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2018, 15:05 |
|
Firebird 2.5 запрос MAX с группировкой
|
|||
---|---|---|---|
#18+
WildSery, а не хватается композит в group by + max (даже если он DESC) И +0 для первого запроса не помогает ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2018, 15:10 |
|
Firebird 2.5 запрос MAX с группировкой
|
|||
---|---|---|---|
#18+
kdvAlexandr C, это ты fetchAll не сделал. Запрос KreatorXXI делает совсем дохрена лишнего. Можно считать его вариант извратом :-) Обрамление внутреннего запроса внешним никогда не даст выигрыша, это нонсенс. Ага! Как раз такой случай и есть. Через год у него таблица вырастет в сто раз, а Вы будете советовать ради одной записи лопатить запрос по этой выросшей таблице? Агрегаты посоветуйте ещё. В общем, жизнь иногда далека от теории. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2018, 15:11 |
|
Firebird 2.5 запрос MAX с группировкой
|
|||
---|---|---|---|
#18+
Симонов Денис, Вот об этом и речь. Получается простой запрос с группировкой очень неэффективно выполняется. Мне интересно, это именно ограничение Firebird, или тут проблема в самой постановке задачи. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2018, 15:11 |
|
Firebird 2.5 запрос MAX с группировкой
|
|||
---|---|---|---|
#18+
Alexandr C, расскажи, как же эффективно выполнять "простой запрос с группировкой" ? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2018, 15:30 |
|
Firebird 2.5 запрос MAX с группировкой
|
|||
---|---|---|---|
#18+
Alexandr C, это смотря с какой стороны смотреть. Для группировки известны 2 способа: через сортировку (если можно прочесть в порядке индекса ORDER IDX) и HASH GROUP (это в Firebird не реализовано). Это хорошо работает для любой агрегатной функции. Когда нет группировки, то MIN и MAX при наличии индекса можно вычислить очень быстро. С другими агрегатами это не прокатит, придётся целиком сканировать таблицу. Придёт dimitr подскажет возможно ли что-то сделать в оптимизаторе ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2018, 15:30 |
|
Firebird 2.5 запрос MAX с группировкой
|
|||
---|---|---|---|
#18+
Симонов ДенисДля группировки известны 2 способаЕсть ещё, но мне интересно что нам расскажет ТС ;) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2018, 15:35 |
|
Firebird 2.5 запрос MAX с группировкой
|
|||
---|---|---|---|
#18+
hvladСимонов ДенисДля группировки известны 2 способаЕсть ещё, но мне интересно что нам расскажет ТС ;) Согласен с Вами, моими знаниями можно только повеселить знающих предмет обсуждения)) Поэтому и надеюсь на совет уважаемого сообщества ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2018, 15:57 |
|
Firebird 2.5 запрос MAX с группировкой
|
|||
---|---|---|---|
#18+
KreatorXXIу него таблица вырастет в сто раз, а Вы будете советовать ради одной записи лопатить запрос по этой выросшей таблице? Агрегаты посоветуйте ещё. и посоветую. Зачем заниматься онанизмом, постоянно перечитывая данные, которые увеличиваются с каждым годом? Ясен пень, что программист на начальном этапе разработки об этом не думает. Но думать-то надо. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2018, 15:59 |
|
Firebird 2.5 запрос MAX с группировкой
|
|||
---|---|---|---|
#18+
Проблема "быстрой группировки" состоит только в получении всех client_id. Если есть отдельная таблица, где client_id уникальны - дальше всё просто. Для каждого client_id получить максимальное время уже не проблема. И хотя в плане пишется PLAN (TBL1 ORDER TBL_IDX1), на самом деле там ещё и INDEX TBL_IDX1, это не простой обход в порядке индекса. Кстати, max(tstamp) неправильно, поскольку рано или поздно получим 2 записи. Правильно писать first 1 tstamp ... order by tstamp desc ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2018, 16:22 |
|
Firebird 2.5 запрос MAX с группировкой
|
|||
---|---|---|---|
#18+
KreatorXXIЧерез год у него таблица вырастет в сто раз, а Вы будете советовать ради одной записи лопатить запрос по этой выросшей таблице? А через два года она вырастет в миллион раз и придёт время задуматься "а нужен ли мне этот запрос вообще". И таки да, тогда придёт время для хранимых агрегатов. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2018, 16:36 |
|
Firebird 2.5 запрос MAX с группировкой
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, Не в таком простом случае. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2018, 16:45 |
|
Firebird 2.5 запрос MAX с группировкой
|
|||
---|---|---|---|
#18+
WildSeryПроблема "быстрой группировки" состоит только в получении всех client_id. Если есть отдельная таблица, где client_id уникальны - дальше всё просто. Для каждого client_id получить максимальное время уже не проблема. И хотя в плане пишется PLAN (TBL1 ORDER TBL_IDX1), на самом деле там ещё и INDEX TBL_IDX1, это не простой обход в порядке индекса. Кстати, max(tstamp) неправильно, поскольку рано или поздно получим 2 записи. Правильно писать first 1 tstamp ... order by tstamp desc Спасибо. Заменил на first 1 tstamp ... order by tstamp desc ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2018, 16:48 |
|
Firebird 2.5 запрос MAX с группировкой
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, В постановке задачи ТС агрегаты не потребуются. Видно, что max отрабатывается нормально. Например, каждый раз сумму считать - это да, согласен, наступит момент. Не надо из пушки по воробьям лупить. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2018, 16:50 |
|
|
start [/forum/topic.php?fid=40&msg=39599164&tid=1561245]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
52ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 146ms |
0 / 0 |