Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
提高向许多人写入Django queryset的性能_Django_Many To Many_Django Queryset - Fatal编程技术网

提高向许多人写入Django queryset的性能

提高向许多人写入Django queryset的性能,django,many-to-many,django-queryset,Django,Many To Many,Django Queryset,我有一个Django 1.11应用程序。有一个模型活动,我可以指定参数来选择用户。运行活动时,我使用FKcompaign\u id和M2Musers创建一个活动运行实例。每次运行活动时,结果查询集中可能会有不同的用户,因此我想保留一个记录。我这样做如下所示: run = CampaignRun.objects.create(campaign=self, ...) (...) filtered_users = User.objects.filter(email__in=us

我有一个Django 1.11应用程序。有一个模型活动,我可以指定参数来选择用户。运行活动时,我使用FK
compaign\u id
和M2M
users
创建一个活动运行实例。每次运行活动时,结果查询集中可能会有不同的用户,因此我想保留一个记录。我这样做如下所示:

    run = CampaignRun.objects.create(campaign=self, ...)
    (...)
    filtered_users = User.objects.filter(email__in=used_emails)
    run.users.add(*filtered_users)   # I also tried run.users.set(filtered_users)
    run.save()
但是,如果活动是从django admin运行的,并且产生的用户数超过大约150,则该过程需要30秒以上,这将导致错误502:坏网关


在我看来,150是获得超时的低得离谱的数字,所以我相信一定有足够的空间来优化流程。我可以做些什么来改进这个过程?我在Django有什么选择?您是否建议使用完全不同的方法(例如nosql)

你知道哪个确切的查询需要那么多时间吗。MB值得使用调试工具栏检查吗?认为 EMALYIGIN=也是VARCHAR的重查询。也许您需要将db_索引添加到ITI中如果您正在查询某个地方的CampaignRun及其用户,则每次CampaignRun迭代都可能需要花费150次的时间