#30685: Suboptimal QuerySet.distinct().count()
-------------------------------------+-------------------------------------
     Reporter:  adamsol              |                    Owner:  nobody
         Type:                       |                   Status:  closed
  Cleanup/optimization               |
    Component:  Database layer       |                  Version:  2.2
  (models, ORM)                      |
     Severity:  Normal               |               Resolution:  invalid
     Keywords:                       |             Triage Stage:
                                     |  Unreviewed
    Has patch:  0                    |      Needs documentation:  0
  Needs tests:  0                    |  Patch needs improvement:  0
Easy pickings:  0                    |                    UI/UX:  0
-------------------------------------+-------------------------------------

Comment (by Carlton Gibson):

 I think the issue is that there's no way for the `distinct()` call to know
 that you're going to follow up with a `count()` — and that code to special
 case for that isn't going to worth the effort.

 If you know you only want to select a single field tell the ORM via
 
[https://docs.djangoproject.com/en/2.2/ref/models/querysets/#django.db.models.query.QuerySet.only
 `only()`]. This'll give you want you need, I think:
 `Model.objects.only('id').distinct().count()`.

 (Maybe the ORM experts can tell you more, but I suspect that be more or
 less the end of the story...)

-- 
Ticket URL: <https://code.djangoproject.com/ticket/30685#comment:3>
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/065.df697d9dbcbe6b9cd933230a35bd1f05%40djangoproject.com.

Reply via email to