4 ms·
There was an index on the PK column and the value column as well. Edit: Oh no, there was not. My bad :/ I added an index and the query time dropped to 5 second
by orf 9y ago
There was an index on the PK column and the value column as well.
Edit: Oh no, there was not. My bad :/ I added an index and the query time dropped to 5 seconds or so. A lot, lot faster, but 4x as slow as the CASE version.
Parallel queries would probably perform better, but I'm looking at a more general case. Django supports a lot of backends and not all of them support parallel queries, and indeed there is no way to make parallel queries like this in Django.
If we are talking about Postgres specifics, there is some better syntax for this that lets you join on a list of Values you can construct, which I intend to add support for later.
But if using 1 case statement is generally faster than issuing N individual synchronous queries then it's a big win for applications that have to do this kind of thing:
for instance in queryset.all():
instance.field = some_function()
instance.save()
While this isn't a super common pattern it does crop up from time to time and it's annoying to work around (if you even can).
- mgkimsal 9y agothanks for the details. 4-5 seconds sort of makes sense, depending on hardware. 3 minutes made no sense.