#35399: Reduce the "Case-When" sequence for a bulk_update when the values for a certain field are the same. -------------------------------------+------------------------------------- Reporter: Willem Van Onsem | Owner: nobody Type: | Status: closed Cleanup/optimization | Component: Database layer | Version: 5.0 (models, ORM) | Severity: Normal | Resolution: duplicate Keywords: db, bulk_update, | Triage Stage: case, when | Unreviewed Has patch: 1 | Needs documentation: 0 Needs tests: 0 | Patch needs improvement: 0 Easy pickings: 0 | UI/UX: 0 -------------------------------------+------------------------------------- Comment (by Willem Van Onsem):
Hi, that is already in the changeset: in case the item is not hashable, it will raise a type error: we catch that, and then fallback on the original way of doing it, without much delay. So it is more a boosting mechanism that when fails, is "disabled" when running through it. The hash of an expression indeed is take more time than the one of an `int`, but the idea is that this often will still pay off, since the cascade of Case`-`When` essentially forces the database into linear search, while it *might* be possible that a certain database finds a way, if that is not the case, it will first look at the first `When`, if that fails, the next one, etc. so for ~1000 `When`s, it will on average take 500 items per row. I agree that a temporary table is probably more ideal. -- Ticket URL: <https://code.djangoproject.com/ticket/35399#comment:6> 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/0107018f114c1448-67138b52-928c-4127-b52f-06f58f7961be-000000%40eu-central-1.amazonses.com.