[PATCH] Optimise querying of checks in patch list view
Stephen Finucane
stephenfinucane at hotmail.com
Tue Sep 20 09:32:31 AEST 2016
On 15 Sep 18:10, Daniel Axtens wrote:
> tl;dr: with about 300 mails from the patchwork list, according to
> django-debug-toolbar, to render
> http://localhost:8000/project/patchwork/list/
>
> Without this patch:
> - ~1.35 seconds of CPU time
> - 110 SQL queries, taking ~70ms
>
> With this patch:
> - < 0.3 seconds of CPU time
> - 10 SQL queries, taking <20ms
>
> How? Replace an .exclude() on a QuerySet with a list comprehension.
> Yes, that's normally a pessimisation.
> Surprisingly, it's an optimisation here.
> Why? Where we're looking at patches in anything that uses a generic_list()
> in the view, we do a prefetch_related('check_set'). But, if we then do a
> .filter or a .exclude, that throws out the existing, cached information,
> and does another query. (See the Django docs on prefetch_related.)
>
> So, do it 'by hand' in Python instead.
>
> Signed-off-by: Daniel Axtens <dja at axtens.net>
Checks out for me.
Reviewed-by: Stephen Finucane <stephenfinucane at hotmail.com>
More information about the Patchwork
mailing list