LINUX.ORG.RU

Долгое удаление записей из связанной таблицы

 ,


0

2

Есть таблица Document (5 млн. записей) и связанная таблица DocumentLinks (35 млн. записей) связь 1-М (один ко многим), у таблицы DocumentLinks поля Id, IdLink, DocumentId, DocumentLink все они связаны с первичным ключом из таблицы Document.

При удалении записей из таблицы Document каскадно удаляются связанные записи из DocumentLinks - это происходит очень долго (одна запись удаляется 6 сек.), даже в том случае когда связанных записей нет в DocumentLinks. Индексы созданы по всем полям Id, IdLink, DocumentId, DocumentLink.

"Delete on "Document"  (cost=0.42..8.44 rows=1 width=6) (actual time=0.043..0.043 rows=0 loops=1)"
"  Buffers: shared hit=6"
"  ->  Index Scan using "iDocument-FullCode" on "Document"  (cost=0.42..8.44 rows=1 width=6) (actual time=0.026..0.027 rows=1 loops=1)"
"        Index Cond: ("FullCode" = '2021'::text)"
"        Buffers: shared hit=4"
"Planning time: 0.941 ms"
"Trigger for constraint rDocumentLinks-Id: time=8.784 calls=3"
"Trigger for constraint rDocumentLinks-IdLink: time=59818.664 calls=3"
"Trigger for constraint rDocumentLinks-DocumentId: time=51.304 calls=3"
"Trigger for constraint rDocumentLinks-DocumentLink: time=24.373 calls=3"
"Execution time: 60018.958 ms"

Вопрос как можно ускорить удаление записей?

Индексы созданы по всем полям

Чем больше индексов, тем быстрее поиск, но медленнее добавление/удаление. Можно попробовать для начала минимизировать число индексов, оставив только необходимые.

aureliano15 ★★
()

Для начала надо знать время селектов по этим четырём индексам, причем как успешного поиска, так и отсутствующего ключа (8 цифирек). В плане запроса должен быьт использоват именно нужный индекс.

Кроме того, попробуй вначале удалить из DocumentLinks связанные документы , а только потом из Document, сколько времени займет.

Psilocybe ★★★★
()
Последнее исправление: Psilocybe (всего исправлений: 1)

Похоже что нет индекса по idLink. Проверь.

maxcom ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.