62
задан 18 October 2013 в 01:37

1 ответ

Если на таблицу, из которой Вы удаляете, ссылаются some_other_table (и Вы не хотите отбрасывать внешние ключи даже временно), удостоверьтесь, что у Вас есть индекс на ссылка столбец в some_other_table!

я имел подобную проблему и использовал auto_explain с auto_explain.log_nested_statements = true, который показал, что эти delete на самом деле делал seq_scans на some_other_table:

    Query Text: SELECT 1 FROM ONLY "public"."some_other_table" x WHERE $1 OPERATOR(pg_catalog.=) "id" FOR KEY SHARE OF x    
    LockRows  (cost=[...])  
      ->  Seq Scan on some_other_table x  (cost=[...])  
            Filter: ($1 = id)

, По-видимому, это пытается заблокировать строки ссылки в другой таблице (который не должен существовать, или удаление перестанет работать). После того, как я создал индексы на таблицах ссылки, удаление было порядками величины быстрее.

0
ответ дан 31 October 2019 в 14:14

Другие вопросы по тегам:

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