Django 多重注释减慢查询速度

2024-03-05

我一直在调试django debug_toolbar,如果我在查询中使用多个注释,那么 Django 会花费大量时间来获取查询结果。

class Project_First(models.Model):
   project_first_results_M2M = models.ManyToManyField(Project_First_Results)

class Project_Second(models.Model):
   project_second_results_M2M = models.ManyToManyField(Project_Second_Results)

class Project(models.Model):
    project_first_M2M = models.ManyToManyField(Project_First)
    project_second_M2M = models.ManyToManyField(Project_Second)
  • 我正在尝试计算中存在的所有对象project_first_results_M2M所有的project_first_M2M对象。

即,我们假设,project_first_M2M有 3 个对象Project_First我想计算所有总数project_first_results_M2M对象存在于所有 3 个中。

Project.objects.all().annotate(first_res_count=Count('project_first_M2M__project_first_results_M2M',distinct=True))
  • 上面的查询工作正常,需要 80 毫秒才能获取结果。但是当我尝试添加额外的时出现问题annotate来查询。
Project.objects.all().annotate(first_res_count=Count('project_first_M2M__project_first_results_M2M',distinct=True)).annotate(second_res_count=Count('project_second_M2M__project_second_results_M2M',distinct=True))
  • 这将花费近 4000 毫秒来获取结果。

Both project_second_M2M and project_first_M2M包含相同的字段和相同数量的对象。我什至尝试在反之亦然的情况下对上述查询进行操作,并且仅当我添加额外的查询时查询才会减慢annotate.

  • 是否有任何快速且替代的解决方案可以以更有效的方式实现相同的目标?也许使用原始 sql 查询。
  • 我想计算所有的对象project_first_results_M2M of all project_first_M2M每个内的对象Project对象,类似地project_second_results_M2M

也许你可以使用prefetch related https://docs.djangoproject.com/en/3.0/ref/models/querysets/#prefetch-related:

Project.objects.prefetch_related('project_first_M2M__project_first_results_M2M', 'project_second_M2M__project_second_results_M2M').annotate(first_res_count=Count('project_first_M2M__project_first_results_M2M',distinct=True)).annotate(second_res_count=Count('project_second_M2M__project_second_results_M2M',distinct=True))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django 多重注释减慢查询速度 的相关文章

随机推荐

  • 使用 Maven 在 gitlab 中运行 (Docker) 测试容器

    我正在 gitlab ci cd 管道中工作 该管道使用 maven 和 docker 执行其所有命令 不包括部署 在本例中 我尝试运行集成测试 由 Maven 启动 它使用测试容器 用于 mysql 数据库 这些测试在本地运行时工作正常
  • 如何在 Vue 模板中的数组中使数据响应

  • 如何从 Java Web 应用程序将用户发推文到他/她的 Twitter 帐户

    你好 我想构建一个 java web 应用程序 我希望用户从我的 java 应用程序在他的帐户上发推文 现在 当我们考虑 twitter4J 时 它显示的代码正在使用我们自己在 twitter 开发门户上注册的应用程序 它不要求客户提供凭据
  • 使用命名导入在 Je​​st 测试中导入“常量”

    我有一个config and constants我的项目中的文件夹 位于src config test ts src constants index js分别 我已经设置了 Jest 来使用moduleNameMapper如下所示 这样我就
  • React 测试库不更新状态

    我的组件 import React from react const TestAsync gt const counter setCounter React useState 0 const delayCount gt setTimeout
  • 多个轴的单个图例[重复]

    这个问题在这里已经有答案了 我有以下示例代码 fig1 suptitle Test ax1 fig1 add subplot 221 ax1 plot x y1 color b label aVal ax2 ax1 twinx ax2 pl
  • Spring Security Kerberos 与基本的链接

    我有一个关于 Spring Security 的快速问题 我正在寻找一种解决方案 将安全性集成到我们的应用程序中 该应用程序提供 SSO 但也提供基本的 HTTP 我们系统的自动化部分之一只能支持基本身份验证 而我们却被困在其中 目前 我们
  • Android udp 多播与以太网

    大家好 我正在开发一个使用 udp 多播的项目 我有一台服务器通过以太网电缆发送多播 udp 数据包 我花了几周的时间阅读有关 android 上多播的所有帖子 但我仍然无法在我的 Asus Transformer Tablet 4 1 上
  • 如何在 Angular 中添加可重用的模式对话框?

    我是 Angular 新手并尝试实施这个解决方案 http adamalbrecht com 2013 12 12 creating a simple modal dialog directive in angular js 进入我的项目
  • 将 xml 响应映射到类?

    我不知道如何将某些 XML 表示为 C 类 有人对如何正确映射此 xml 有任何建议吗 下面是我的尝试
  • MySQL 根据条件求和多个列值

    我有以下架构 两个表 APPS ID bigint USERID Bigint USAGE START TIME datetime 1 12 2013 05 03 04 42 55 2 12 2013 05 12 06 22 45 3 12
  • C# 使用参数从内存加载 .NET 程序集

    我想知道如何从带有参数的字节数组启动 NET 程序集 我不想先将其写入磁盘 谁能给我一个关于如何做到这一点的例子吗 谢谢 这应该可以解决问题 Assembly program Assembly Load ASSEMBLY BYTES str
  • 使用 ActiveRecord 在表上自连接

    我有一个名为的 ActiveRecordName其中包含各种名称Languages class Name lt ActiveRecord Base belongs to language class Language lt ActiveRe
  • 构造函数中的数组设置意味着稍后会失败

    我遇到了一个问题 我的代码在尝试使用列表的 size 函数时出现段错误 根据 stackoverflow 的建议 我构建了一个发生段错误的最小情况 在下面的调用 inventory size 中 这是 include
  • 在 JSP 文件中导入类

    我编写了一些 Java Servlet 代码 现在尝试将其转换为 JSP 我在我正在使用的单独文件中编写了一个类 但我不知道如何让 JSP 文件识别该类 我猜这与进口有关 我给全班同学一个包裹 package mypackagename 名
  • 如何将 NSArray 存储到 plist 或数据库中?

    我有这个应用程序 当我点击某个按钮时 它必须存储信息 事实是 当我点击这个按钮时 我需要在本地存储这些数据 这样我就可以在其他视图中将其加载 并将其显示为数据 我正在考虑一些 plis 或数据库 问题是我无法得到一个想法或一些好的东西 我传
  • 如何在jackson json反序列化中跳过包装对象

    我正在尝试使用 Jackson 反序列化以下字符串 roomName u8ec29p0j7q2m9f broadcastPresenceRoles broadcastPresenceRole moderator participant vi
  • vb.net 2008 文本框最大长度

    vb net 2008 中文本框中最多可以输入多少个字符 假设 Windows 窗体 文本框 MaxLength http msdn microsoft com en us library system windows controls t
  • 使用 apply 和不同的函数参数来计算每个元素

    假设我有一个矩阵 垫子 mat lt matrix 1 5 nrow 10 ncol 3 byrow TRUE 我有某种想要应用的函数 在本例中按列应用 getRMSE lt function true est sqrt mean true
  • Django 多重注释减慢查询速度

    我一直在调试django debug toolbar 如果我在查询中使用多个注释 那么 Django 会花费大量时间来获取查询结果 class Project First models Model project first results