我正在使用MySQL上的Django ORM進行非常簡單的聚合,並且它正在生成GROUP BY
子句,其中包含data
字段,該字段非常大,並且正在通過over 100倍。Django聚合做了過多的GROUP BY子句
這裏是模型的簡化版本:與
Document.objects.annotate(num_attachments=Count('attachment'))
的SQL輸出:
class Document(models.Model):
data = models.TextField()
class Attachment(models.Model):
document = models.ForeignKey(Document)
而且我運行查詢
SELECT
`document_document`.`id`,
`document_document`.`data`,
COUNT(`document_attachment`.`id`) AS `num_attachments`
FROM `document_document`
LEFT OUTER JOIN `document_attachment`
ON (`document_document`.`id` = `document_attachment`.`document_id`)
GROUP BY
`document_document`.`id`,
`document_document`.`id`,
`document_document`.`data`
ORDER BY NULL
上做GROUP BY
數據領域是不必要的和荒謬的。我可以做一個values
查詢停止此:
Document.objects.values('pk').annotate(num_attachments=Count('attachment'))
但後來我怎麼得到一個真正的,註釋的文檔作爲查詢的結果?
也就是說奇怪,我試圖與外鍵的類似例子,它不會工作。我只能讓它與ManyToMany關係一起工作。我知道這是模型的簡化版本,您是否可能有不同的ManyToManyField指向文檔的某處?還是有一個文檔自我領域,一個文檔引用另一個文檔? – Furbeenator
我設置了相同的模型並嘗試過,只添加了一個'name = models.CharField(max_length = 24)'並且有類似的東西,只有它有三個字段的GROUP BY,TWICE!絕對看起來像一個錯誤。我正在使用1.3.1版,結果相同。 – Furbeenator
@Furbeenator我找不到任何與Django bug跟蹤器相關的東西。順便說一句,我在1.3.0上。 –