<p>你可以从</p>
<pre><code>for drg_id in DrugBankDrugEPClass.objects.values_list('drug_bank_id', flat = True).distinct():
classtocomp = DrugBankDrugEPClass.objects.filter(drug_bank_id = str(drg_id)).values_list('epc_id', flat=True).distinct()
</code></pre>
<p>至</p>
<pre><code>drug_ids = DrugBankDrugEPClass.objects.values_list('drug_bank_id', flat = True).distinct()
comps = DrugBankDrugEPClass.objects.filter(drug_bank_id__in = drug_ids).values_list('epc_id', flat=True).distinct()
</code></pre>
<p>然后迭代<code>comps</code>结果集。你知道吗</p>
<p>您应该做的其他优化是将<code>db_index = True</code>添加到您要查询的必要字段中。你知道吗</p>
<p>如果使用Postgres,可以将字段参数添加到<a href="https://docs.djangoproject.com/en/2.0/ref/models/querysets/#distinct" rel="nofollow noreferrer">^{<cd3>}</a>:</p>
<blockquote>
<p>On PostgreSQL only, you can pass positional arguments (*fields) in order to specify the names of fields to which the DISTINCT should apply. This translates to a SELECT DISTINCT ON SQL query. Here’s the difference. For a normal distinct() call, the database compares each field in each row when determining which rows are distinct. For a distinct() call with specified field names, the database will only compare the specified field names.</p>
</blockquote>
<p>您可以在其中执行以下操作:</p>
<pre><code>comps = DrugBankDrugEPClass.objects.values_list('drug_bank_id', flat = True).distinct('drug_bank_id', 'epc_id')
</code></pre>
<p>编辑以添加:</p>
<p>此外,您可以使用<a href="https://github.com/jazzband/django-silk" rel="nofollow noreferrer">^{<cd4>}</a>或<a href="https://github.com/jazzband/django-debug-toolbar" rel="nofollow noreferrer">^{<cd5>}</a>之类的附加组件来分析查询和应用程序</p>