Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
нарастающий итог
|
|||
|---|---|---|---|
|
#18+
Подскажите, пожалуйста, эффективный алгоритм расчета нарастающего итога средствами PostgreSQL. Пусть дана таблица: Код: plaintext 1. 2. 3. 4. 5. 6. Вот "нормальный", классический SQL: Код: plaintext 1. 2. 3. 4. 5. На больших объемах такой код будет жутко тормозить... На MSSQL можно применить трюк с хранением промежуточного результата в переменной: Код: plaintext 1. 2. 3. 4. Подобное не проходит в PG. Есть ли какая-то возможность ускорить этот расчет средствами PG? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2007, 15:52 |
|
||
|
нарастающий итог
|
|||
|---|---|---|---|
|
#18+
Вадим ПрудивусПодскажите, пожалуйста, эффективный алгоритм расчета нарастающего итога средствами PostgreSQL. Вот "нормальный", классический SQL: Код: plaintext 1. 2. 3. 4. 5. На больших объемах такой код будет жутко тормозить... Подобное не проходит в PG. Есть ли какая-то возможность ускорить этот расчет средствами PG? Mojno PL/PgSQL'koi sdelat' -- vpolne bystro poluchaetsia. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2007, 16:54 |
|
||
|
нарастающий итог
|
|||
|---|---|---|---|
|
#18+
"трюк" с хранением промежуточного результата в переменной работает и PG.. Причем PG позволяет для этого воспользоваться несколькими путями. Я покажу только один из них - наиболее родной для PG. В настройках файла postgresql.conf - находим секцию Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Да и хранится в переменной только текст НО: Вот как в итоге будет выглядеть запрос: Т.е. заявленный результат получается за один проход по индексу(ID - если он есть) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Второй вариант использование возможностей подключаемых языков - Python,Perl,Tcl,Java.. Но по моему достаточно и вышеизложенного варианта.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2007, 19:20 |
|
||
|
нарастающий итог
|
|||
|---|---|---|---|
|
#18+
Вадим ПрудивусВот "нормальный", классический SQL: На больших объемах такой код будет жутко тормозить...Сделай вместо SELF-JOIN-а коррелированный скалярный подзапрос в секции селект. Серверу легче станет... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2007, 04:37 |
|
||
|
нарастающий итог
|
|||
|---|---|---|---|
|
#18+
Спасибо всем ответившим. Попробую сравнить скорость выполнения первых двух вариантов. авторСделай вместо SELF-JOIN-а коррелированный скалярный подзапрос в секции селект. Вот так? Код: plaintext 1. 2. 3. Это вроде как то же самое, что и в первом варианте. Или в PG оптимизатор подготовит его как-то иначе чем первый вариант? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2007, 11:30 |
|
||
|
нарастающий итог
|
|||
|---|---|---|---|
|
#18+
Вариант с накоплением результата в переменной однозначно будет быстрее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2007, 13:14 |
|
||
|
нарастающий итог
|
|||
|---|---|---|---|
|
#18+
Вариант с переменной рулит!!! Но вот такой вопрос: почему функции current_setting и set_config находятся в секции System Administration Functions? Не вредно ли использовать функции системного администрирования для подобных целей? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2007, 10:31 |
|
||
|
нарастающий итог
|
|||
|---|---|---|---|
|
#18+
Потому, что эти функции предназначены для установки и считывания конфигурационных значений. По большому счету конечно, конечному юзеру давать доступ к этим функциям грешно - ибо в неумелых руках они могут оказаться дубиной с которой можно поломать всю систему. В принципе можно расположить эти вызовы внутри специальных функций ( типа GET и SET) и ограничить доступ к телу функций из вне дав им соответсвующие права.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2007, 11:53 |
|
||
|
нарастающий итог
|
|||
|---|---|---|---|
|
#18+
Вариант с циклом, как самый простой и понятный/предсказуемый, оказался и достаточно быстрым. Похоже что придется пересмотреть некоторые подходы (по сравнению с MS SQL, где циклы серьезно тормозят). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2007, 12:24 |
|
||
|
нарастающий итог
|
|||
|---|---|---|---|
|
#18+
Может, проще это делать во время вставки? Код: 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. Что касается переменных сессии: тынц. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2007, 07:43 |
|
||
|
нарастающий итог
|
|||
|---|---|---|---|
|
#18+
авторМожет, проще это делать во время вставки? Скорости это наверняка не прибавит. Задача расчета нарастающего итога вспомогательная, хранить так данные не нужно. Цикл справляется с ней хорошо, и, похоже, сам способ расчета будет изменен, необходимость вычисления нарастающего итога отпадает (это была вынужденная мера для ускорения работы логики в MS SQL). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2007, 12:59 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=34470187&tid=2005500]: |
0ms |
get settings: |
9ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
134ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
66ms |
get tp. blocked users: |
1ms |
| others: | 265ms |
| total: | 513ms |

| 0 / 0 |
