Opened 7 years ago

Closed 6 years ago

#13067 closed (fixed)

make bulk-deletion lots faster

Reported by: Carl Meyer Owned by: nobody
Component: Database layer (models, ORM) Version: master
Severity: Keywords:
Cc: Triage Stage: Accepted
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: UI/UX:


Model._collect_sub_objects is called separately for every individual object-to-be-deleted, and so every relation is followed and queried once for every individual object. It is possible to condense those queries down to a single bulk query per related model, which should result in massive speedups for large bulk QuerySet deletions with related objects. Even single-object deletions will be significantly faster if they have a large number of related objects to be cascade-deleted that themselves have relations.

Alex Gaynor and I have been discussing implementation ideas, including how to do this without negatively impacting the fix for #6191.

Change History (3)

comment:1 Changed 7 years ago by Russell Keith-Magee

Needs documentation: unset
Needs tests: unset
Patch needs improvement: unset
Triage Stage: UnreviewedAccepted

comment:2 Changed 7 years ago by Johannes Dollinger

My patch in #7539 does this.

comment:3 Changed 6 years ago by Carl Meyer

Resolution: fixed
Status: newclosed

(In [14507]) Fixed #7539, #13067 -- Added on_delete argument to ForeignKey to control cascade behavior. Also refactored deletion for efficiency and code clarity. Many thanks to Johannes Dollinger and Michael Glassford for extensive work on the patch, and to Alex Gaynor, Russell Keith-Magee, and Jacob Kaplan-Moss for review.

Note: See TracTickets for help on using tickets.
Back to Top