我正在使用MySQL上的Django ORM进行一个非常简单的聚合,它正在生成一个GROUP BY
子句,其中包含data
字段,该字段非常大,并且正在减慢查询速度超过100倍。
以下是该模型的简化版本:
class Document(models.Model):
data = models.TextField()
class Attachment(models.Model):
document = models.ForeignKey(Document)
我正在运行的查询:
Document.objects.annotate(num_attachments=Count('attachment'))
SQL输出:
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'))
但是,如何才能获得真实的,带注释的Document查询?
答案 0 :(得分:2)
Django核心提交者Karen Tracy已经确认这实际上是Django中的一个错误:
http://groups.google.com/group/django-users/browse_thread/thread/22d4d46c8646b2c4#