У меня есть база данных PostgreSQL с таблицами, которые имеют более 500 миллиардов строк.Я пытаюсь удалить около 6 миллионов строк, но это занимает более 4 минут.Мне нужно оптимизировать эти операции удаления, чтобы создать полезную систему.
Я думаю, что хорошей идеей может быть отключение ограничений и триггеров, а затем снова включить их, поэтому мои вопросы:
Как я могу отключить все ограничения?И возможно ли отключить отношения между таблицами?
Прямо сейчас я просто отключаю триггеры, используя это:
Alter table "table_name" disable all
И включаю его снова, используя это:
Alter table "table_name" enable all
Редактировать
Это результат запроса с включенными триггерами.
Delete on "ParameterValues" (cost=0.00..1015910.71 rows=47196359 width=6) (actual time=296995.938..296995.938 rows=0 loops=1)
Buffers: shared hit=6000000 read=420811 dirtied=93346 written=51646
-> Seq Scan on "ParameterValues" (cost=0.00..1015910.71 rows=47196359 width=6) (actual time=7977.126..19798.361 rows=6000000 loops=1)
Filter: ("Id" < 23000000)
Rows Removed by Filter: 34218414
Buffers: shared read=420811 dirtied=49228 written=51646
Planning Time: 304.085 ms
Execution Time: 296995.963 ms
Отключение всех триггеров Улучшаю производительность, сокращая время выполнения с 5 минут до 3минут.
Alter table "table_name" disable trigger all
Однако мне нужно улучшить больше операций удаления.Есть идеи?