@beduin01

Почему так медленно удаляются данные из Postgres?

Есть таблица вот с такой структурой (выкладываю сгененированный html) rghost.ru/6WG8l7PMN (прошу не пинать, не я проектировал).

Нужно оттуда удалить все данные до 2014 года и после 2015. Вот сам запрос:

DELETE FROM
request.request
WHERE request.agreed <=  '2014-01-01' 
OR request.agreed >=  '2015-01-01'


Проблема в том, что удаление происходит крайне медленно. 2 записи удаляются полторы секунда! А сколько будет несколько тысяч записей удалять?

Почему так все медленно? PG версии 9.1, есть способ ускорить? Пока задача именно в том, чтобы данные разово оттуда удалить и все.
  • Вопрос задан
  • 1571 просмотр
Пригласить эксперта
Ответы на вопрос 2
@liff
PHP >= 5.4, 7 + PostgreSQL + JS + EmberJs +++
сделай индекс по полю agreed или функ-ный индекс.
Если данных очень много то поможет партицирование.

П.с схему бд не смотрел.
Ответ написан
Комментировать
@RayTop
Знаю что для ответа и решения текущей проблемы уже поздно. Но если ктото как и я попадет сюда хотя бы увидит один из вариантов решения.

В моем случае при удалении данных сильно тормозили работу внешние ключи таблицы.
Даже со значением 'NO ACTION'.
Удаление внешних ключей значительно ускоряет чистку данных.
Если ключи вам необходимы то для скорости чистки можно их удалить перед чисткой таблицы и вернуть после.
Также чистка связанных таблиц отдельными запросами пройдет значительно быстрее чем чистка с каскадным ключом на удаление(ON DELETE CASCADE).
Для удаления одиночной записи такое решение пойдет, но не для массовой чистки записей.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы