Hmm, +1 on this. On Thu, May 5, 2011 at 6:26 PM, Satan Study Django < satan.come.and.kill.your.family.an...@gmail.com> wrote:
> Hi. I've some question about aggregation annotate functions, like Max. > I don't realy like the queries it makes. Let me explain. > > Models: > class Person (models.Model): > name = models.CharField (max_length = 100) > login = models.CharField (max_length = 30) > class Home (models.Model): > person = models.ForeignKey (Person) > state = models.ForeignKey (States) > date = models.DateTimeField () > host = models.ForeignKey (Hosts) > time_spent = models.PositiveIntegerField (null = True) > > > Here is the expression with query made by it: > > >>> print > Home.objects.values('person').annotate(Max('id')).order_by().query > SELECT `main_home`.`person_id`, MAX(`main_home`.`id`) AS `id__max` > FROM `main_home` > GROUP BY `main_home`.`person_id`, `main_home`.`person_id` > ORDER BY NULL > > Here i try to explain it: > > mysql> explain SELECT `main_home`.`person_id`, MAX(`main_home`.`id`) > AS `id__max` > FROM `main_home` > GROUP BY `main_home`.`person_id`, `main_home`.`person_id` > ORDER BY NULL; > +----+-------------+-----------+-------+--------------- > +--------------------+---------+------+------ > +------------------------------+ > | id | select_type | table | type | possible_keys | key | key_len | > ref | rows | Extra | > +----+-------------+-----------+-------+--------------- > +--------------------+---------+------+------ > +------------------------------+ > | 1 | SIMPLE | main_home | index | NULL | main_home_21b911c5 | 4 | > NULL | 2188 | Using index; Using temporary | > +----+-------------+-----------+-------+--------------- > +--------------------+---------+------+------ > +------------------------------+ > > As you can see, Using temporary is added, it's bacause > `main_home`.`person_id` used in GROUP BY 2 times: > GROUP BY `main_home`.`person_id`, `main_home`.`person_id` > and it makes query to run really long time. > > If i'll manually remove one of `main_home`.`person_id` from GROUP BY, > query explain will contain no Using temporary, so execution takes > short time. > > Could somebody explain to me - is it a feature? If it is, i really > want to listen reason why. If not - then what? A bug? > > -- > You received this message because you are subscribed to the Google Groups > "Django users" group. > To post to this group, send email to django-users@googlegroups.com. > To unsubscribe from this group, send email to > django-users+unsubscr...@googlegroups.com. > For more options, visit this group at > http://groups.google.com/group/django-users?hl=en. > > -- You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to django-users@googlegroups.com. To unsubscribe from this group, send email to django-users+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/django-users?hl=en.