我正在使用
MySQL上的Django ORM进行一个非常简单的聚合,它正在生成一个包含数据字段的GROUP BY子句,该字段非常大,并且使查询速度减慢了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是不必要和荒谬的.我可以通过执行值查询来阻止它:
Document.objects.values('pk').annotate(num_attachments=Count('attachment'))
但是,我如何得到一个真实的,带注释的文档查询作为结果?
最佳答案 Django核心提交者Karen Tracy已经确认这实际上是Django中的一个错误:
http://groups.google.com/group/django-users/browse_thread/thread/22d4d46c8646b2c4#