Code

Opened 4 years ago

Closed 4 years ago

#13067 closed (fixed)

make bulk-deletion lots faster

Reported by: carljm 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:

Description

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.

Attachments (0)

Change History (3)

comment:1 Changed 4 years ago by russellm

  • Needs documentation unset
  • Needs tests unset
  • Patch needs improvement unset
  • Triage Stage changed from Unreviewed to Accepted

comment:2 Changed 4 years ago by emulbreh

My patch in #7539 does this.

comment:3 Changed 4 years ago by carljm

  • Resolution set to fixed
  • Status changed from new to closed

(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.

Add Comment

Modify Ticket

Change Properties
<Author field>
Action
as closed
as The resolution will be set. Next status will be 'closed'
The resolution will be deleted. Next status will be 'new'
Author


E-mail address and user name can be saved in the Preferences.

 
Note: See TracTickets for help on using tickets.