Я выполняю очень простое агрегирование с использованием ORM Django на MySQL, и оно создает предложение 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 в качестве результата?