#35285: Optimize ForeignObject._check_unique_target
-------------------------------------+-------------------------------------
               Reporter:  Adam       |          Owner:  Adam Johnson
  Johnson                            |
                   Type:             |         Status:  assigned
  Cleanup/optimization               |
              Component:  Database   |        Version:  dev
  layer (models, ORM)                |
               Severity:  Normal     |       Keywords:
           Triage Stage:             |      Has patch:  1
  Unreviewed                         |
    Needs documentation:  0          |    Needs tests:  0
Patch needs improvement:  0          |  Easy pickings:  0
                  UI/UX:  0          |
-------------------------------------+-------------------------------------
 Continuing my project to optimize the system checks, I found some
 optimizations for `ForeignObject._check_unique_target`, which I found to
 take ~6% of the total runtime for checks.

 Most of this function’s runtime was spent creating the set-of-frozensets
 describing all unique constraints on the target model. But this set is not
 needed to determine success in the most typical cases, where a primary key
 or other single unique field is targeted.

 To optimize, we can check for a single unique field first. This
 essentially means restoring the “fast path” replaced in #25535 /
 80dac8c33e7f6f22577e4346f44e4c5ee89b648c with a broad general algorithm to
 cover unique constraints.

 Before optimization stats:

 Profiling running checks 100 times, 20,800 calls took 180ms, or ~6% of the
 total runtime.

 After optimization:

 29ms or ~1% of the total runtime.
-- 
Ticket URL: <https://code.djangoproject.com/ticket/35285>
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 django-updates+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/0107018e20155875-b5c8c41e-525f-463a-91c7-a46eda2c08d5-000000%40eu-central-1.amazonses.com.

Reply via email to