Как быстро трансформировать данные с таблицы А из 500М+ строк в агрегированную таблицу Б?

В целях оптимизации доступа к определенным запросам было решено создать агрегированную таблицу.
Необходимо разово выполнить перенос данных в агрегированную таблицу с обработкой построчно.
Если писать программу с логикой за пределами СУБД, по-моему, будет работать долго из-за трафика туда-обратно.
Не смог нагуглить подходящего ответа.
Подскажите оптимальный способ.
  • Вопрос задан
  • 73 просмотра
Решения вопроса 2
AndyKorg
@AndyKorg
Кнопконажиматель и припоерасплавлятель
Если логика агрегирования простая и умещается в один запрос безо всяких курсоров, то лучше сделать sql скриптом SQL в рамках одной транзакции.
Если сложнее и придется использовать курсор, но не больше одного, то так же в sql скрипт. (возможно обложится индексами)
Во всех остальных случаях вынести в приложение с широкими выборками.
Ответ написан
Комментировать
2ord
@2ord Автор вопроса
Сначала написал хранимую процедуру с использованием курсора (за основу взят код отсюда), которая выполняет вставку-обновление (upsert), которая работала быстро. Но затем таки ради большего контроля над работой обновления написал программу. чтобы была возможность прервать процесс в случае перегрузки и продолжить с того же места.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@dimuska139
Backend developer
А если воспользоваться insert-select?
Ответ написан
Комментировать
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
500M+ не очень много.
В программе вам кстати не кто не мешает делать широкие выборки, обрабатывать их и вставлять обратно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы