Graphene Django中如何预取无直接关联字段以降低查询开销
Django Graphene订单查询预取关联UserProfile优化方案
你只需要在select_related中通过双下划线(__)指定跨层级的关联字段即可,User和UserProfile为一对一关联,属于select_related支持的正向关联范围,修改后的查询语句如下:
orders = Order.objects.select_related( 'from_user', 'to_user', 'from_user__userprofile', 'to_user__userprofile' ).filter( Q(from_user=user) | Q(to_user=user) ).order_by("-id") return orders
select_related支持链式遍历外键、一对一关联的嵌套层级,用双下划线分隔关联字段名即可- 调整后会在单次SQL查询中通过JOIN一次性拉取订单、关联的两个用户、以及两个用户对应的UserProfile全部数据,完全避免后续访问
userprofile字段时产生的额外查询 - 如果后续需要预取一对多或者多对多关联,再使用
prefetch_related即可,当前场景下一对一关联用select_related性能最优
内容的提问来源于stack exchange,提问作者kim
相关产品推荐
相关产品推荐

