我有一個模型所有對象的查詢集。對對象進行迭代,我將刪除列中值爲重複的更新行。因此,無需再次訪問數據庫,我想從更大的查詢集中刪除更新的行。從django中較大的查詢集中排除查詢集而不碰到數據庫
什麼是最有效的方法來做到這一點?
我有一個模型所有對象的查詢集。對對象進行迭代,我將刪除列中值爲重複的更新行。因此,無需再次訪問數據庫,我想從更大的查詢集中刪除更新的行。從django中較大的查詢集中排除查詢集而不碰到數據庫
什麼是最有效的方法來做到這一點?
您可能需要提供有關您的特定用例的更多信息,但一般來說,Django會將查詢集的評估推遲到實際需要的時候。如果您能夠獨立於較大的QuerySet構建排除集的QuerySet,則可以調用.exclude()
方法並生成一個較大的查詢,而不是兩個較小的查詢。例如:
excluded_set = Model.objects.filter(...)
large_set = Model.objects.filter().exclude(id__in=excluded_set)
最好讓SQL篩選原始列表。它被優化來比你更有效地執行WHERE子句。 – duffymo
這是真的,其實我在SQL中嘗試過類似的東西,但這需要太多的時間和CPU使用。我不擅長SQl :( – sprksh
太多時間了嗎?這會向我建議你的模式缺少索引。在SQL上運行EXPLAIN PLAN並查找表掃描。 – duffymo