]> git.ipfire.org Git - thirdparty/patchwork.git/commit
api: EventList: change select_related() to prefetch_related()
authorDaniel Axtens <dja@axtens.net>
Mon, 12 Mar 2018 11:07:15 +0000 (22:07 +1100)
committerDaniel Axtens <dja@axtens.net>
Thu, 5 Apr 2018 09:21:05 +0000 (19:21 +1000)
commit5d9b00409fcafc7b8cd09400195c9c9f1b3e4fcc
treed9624103c389cf507ffc8ea3800881223bd6309b
parent5bc66c8e3c9d6de9d57705ee5d2e4797e84757cb
api: EventList: change select_related() to prefetch_related()

select_related() creates a single giant query that JOINs the required
tables together in the DB. prefetch_related() does a similar thing,
but at the Django layer - for all referenced models, it makes a
separate query to the DB to fetch them.

This massively, massively simplifies the job the DB has to do:
instead of creating a massive, sparse results table with many
columns, we do 1 query for the events, and then query for only
patches/cover letters/series/projects etc referenced in those 30
events.

Tested with cURL + JSON renderer + Postgres w/ ~100k patches,
request time went from 1.5s to 0.25s, a 6x speedup.

Tested with cURL + JSON renderer + MySQL w/ ~33k patches,
request time went from ~2.2s to ~0.20s, an ~11x speedup.

Signed-off-by: Daniel Axtens <dja@axtens.net>
patchwork/api/event.py