Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности

Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
18.04.2007, 15:52
|
|||
|---|---|---|---|
|
|||
нарастающий итог |
|||
|
#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, 16:54
|
|||
|---|---|---|---|
|
|||
нарастающий итог |
|||
|
#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, 19:20
|
|||
|---|---|---|---|
|
|||
нарастающий итог |
|||
|
#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.. Но по моему достаточно и вышеизложенного варианта.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
19.04.2007, 04:37
|
|||
|---|---|---|---|
|
|||
нарастающий итог |
|||
|
#18+
Вадим ПрудивусВот "нормальный", классический SQL: На больших объемах такой код будет жутко тормозить...Сделай вместо SELF-JOIN-а коррелированный скалярный подзапрос в секции селект. Серверу легче станет... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
19.04.2007, 11:30
|
|||
|---|---|---|---|
|
|||
нарастающий итог |
|||
|
#18+
Спасибо всем ответившим. Попробую сравнить скорость выполнения первых двух вариантов. авторСделай вместо SELF-JOIN-а коррелированный скалярный подзапрос в секции селект. Вот так? Код: plaintext 1. 2. 3. Это вроде как то же самое, что и в первом варианте. Или в PG оптимизатор подготовит его как-то иначе чем первый вариант? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
19.04.2007, 13:14
|
|||
|---|---|---|---|
|
|||
нарастающий итог |
|||
|
#18+
Вариант с накоплением результата в переменной однозначно будет быстрее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
20.04.2007, 10:31
|
|||
|---|---|---|---|
|
|||
нарастающий итог |
|||
|
#18+
Вариант с переменной рулит!!! Но вот такой вопрос: почему функции current_setting и set_config находятся в секции System Administration Functions? Не вредно ли использовать функции системного администрирования для подобных целей? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
20.04.2007, 11:53
|
|||
|---|---|---|---|
|
|||
нарастающий итог |
|||
|
#18+
Потому, что эти функции предназначены для установки и считывания конфигурационных значений. По большому счету конечно, конечному юзеру давать доступ к этим функциям грешно - ибо в неумелых руках они могут оказаться дубиной с которой можно поломать всю систему. В принципе можно расположить эти вызовы внутри специальных функций ( типа GET и SET) и ограничить доступ к телу функций из вне дав им соответсвующие права.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
26.04.2007, 12:24
|
|||
|---|---|---|---|
|
|||
нарастающий итог |
|||
|
#18+
Вариант с циклом, как самый простой и понятный/предсказуемый, оказался и достаточно быстрым. Похоже что придется пересмотреть некоторые подходы (по сравнению с MS SQL, где циклы серьезно тормозят). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.04.2007, 07:43
|
|||
|---|---|---|---|
нарастающий итог |
|||
|
#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, 12:59
|
|||
|---|---|---|---|
|
|||
нарастающий итог |
|||
|
#18+
авторМожет, проще это делать во время вставки? Скорости это наверняка не прибавит. Задача расчета нарастающего итога вспомогательная, хранить так данные не нужно. Цикл справляется с ней хорошо, и, похоже, сам способ расчета будет изменен, необходимость вычисления нарастающего итога отпадает (это была вынужденная мера для ускорения работы логики в MS SQL). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=53&mobile=1&tid=2005500]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
130ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 260ms |
| total: | 468ms |

| 0 / 0 |
