Как оптимизировать удаление строки в пакетах в цикле - PullRequest
0 голосов
/ 04 апреля 2019

Я все еще учусь и пытаюсь понять вещи в SQL. У меня есть скрипт, который выполняет удаление в пакетах, как это:

while rows_were_deleted:
    DELETE FROM some_table WHERE id IN (SELECT id FROM deletes_table) LIMIT 1000

И это довольно медленно. Моей первой мыслью было, что SELECT id FROM deletes_table занимает много времени, так как deletes_table имеет несколько тысяч строк. Поэтому я попробовал что-то более похожее

while rows_were_deleted:
    ids_to_delete = SELECT id FROM deletes_table
    for delete_id in ids_to_deletes:
        DELETE FROM some_table WHERE id = delete_id LIMIT 1000

И это было еще медленнее. Я предполагаю, потому что там так много операций. Каков наилучший способ удаления, подобного этому?

1 Ответ

0 голосов
/ 04 апреля 2019
while rows_were_deleted:
    DELETE FROM some_table WHERE id IN (SELECT id FROM deletes_table) LIMIT 1000

Вы также можете попробовать добавить ограничение к select id from deletes_tables.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...