#23576: Fast-path deletion for MySQL
-------------------------------------+-------------------------------------
Reporter: jdufresne | Owner: nobody
Type: Uncategorized | Status: new
Component: Database layer | Version: 1.7
(models, ORM) | Resolution:
Severity: Normal | Triage Stage: Accepted
Keywords: | Needs documentation: 0
Has patch: 0 | Patch needs improvement: 0
Needs tests: 0 | UI/UX: 0
Easy pickings: 0 |
-------------------------------------+-------------------------------------
Changes (by akaariai):
* stage: Unreviewed => Accepted
Comment:
The best advice I can give is to start from
django/db/models/sql/subqueries.py and find update_can_self_select in
there. You might be able to use a different compiler for the original
query, one which does DELETE FROM <original query> instead of SELECT ...
FROM <original query>.
Note that even if you fix this, there are still cases where Django has to
fetch the IDs to memory, then delete only those IDs. The reason is that
Django needs to fire pre/post delete signals and cascade the deletion to
dependent models. Especially for pre-delete signal the model must still
exists in the database, so I don't see any other way than pre-fetch ids,
then delete those ids.
At least on PostgreSQL single query delete doesn't result in concurrency
safe behavior. For example, it is possible that the view deletes the
objects, another transaction commits an conflicting object, and then
finally the view commits its objects -> unique constraint violation.
I am marking this as accepted for allowing fast-path deletion for MySQL.
--
Ticket URL: <https://code.djangoproject.com/ticket/23576#comment:3>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/067.47fdd8655765d5cd7b851fccbbdbebfd%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.