IssueRaiser

`select_related` and `prefetch_related`

When I inspected the actual SQL queries being run against DB, I found that for foreignkey and manytomany relationships, we have the `n+1` problem. For example, suppose there are 5 teams, each with 11 members, this query: ``` query { teams { edges { node { members { edges { node { name } } } } } } } ``` will result in 1 query for selecting `teams`, and 5 more queries for selecting members of each team. 6 queries in total. Normally, we would do a query like this `Team.objects.all().prefetch_related('members')` to reduce to 2 queries. I think it would be extremely beneficial if `DjangoObjectType` can detect special fields: - ForeignField - OneToOneField - OneToManyField - ManyToManyField and apply appropriate `prefetch_related` and/or `select_related` when such fields are present in graph queries.

Posted by khanetor on Nov 13, 2016, 3:05 PM

Tags

Related issues

Raise real-world problems, find people facing the same issue, and discuss solutions.4,500 issues0 comments

github (Other)

`select_related` and `prefetch_related`

khanetorNov 13, 2016, 3:05 PM

When I inspected the actual SQL queries being run against DB, I found that for foreignkey and manytomany relationships, we have the `n+1` problem. For example, suppose there are 5 teams, each with 11 members, this query: ``` query { teams { edges { node { members { edges { node { name } } } } } } } ``` will result in 1 query for selecting `teams`, and 5 more queries for selecting members of each team. 6 queries in total. Normally, we would do a query like this `Team.objects.all().prefetch_related('members')` to reduce to 2 queries. I think it would be extremely beneficial if `DjangoObjectType` can detect special fields: - ForeignField - OneToOneField - OneToManyField - ManyToManyField and apply appropriate `prefetch_related` and/or `select_related` when such fields are present in graph queries.

Comments (0)

No comments yet. Start the discussion.

Comment on this issue