小编典典

Django模型-SELECT DISTINCT(foo)FROM table太慢

sql

我有一个包含13M行的MySQL表。我可以直接查询数据库为

SELECT DISTINCT(refdate) FROM myTable

查询耗时0.15秒,非常棒。

等效表定义为Django模型并查询为

myTable.objects.values(`refdate`).distinct()

需要很长时间。是因为之前列表中的项目太多distinct()。如何以一种不会降低一切的方式做到这一点?


阅读 158

收藏
2021-05-16

共1个答案

小编典典

谢谢@solarissmoke提供指向的指针connection.queries

我期待看到

SELECT DISTINCT refdate FROM myTable

相反,我得到了

SELECT DISTINCT refdate, itemIndex, itemType FROM myTable ORDER BY itemIndex, refdate, itemType.

然后,我查看了中定义的myTable models.py

unique_together = (('nodeIndex', 'refdate', 'nodeType'), )
ordering = ['nodeIndex', 'refdate', 'nodeType']

使用默认排序或ORDER_BY互动

通常,您会希望多余的列在结果中起作用,因此请清除顺序,或者至少确保仅将其限制为您也在values()调用中选择的那些字段。

因此,我尝试order_by()刷新先前定义的顺序,瞧!

myTable.objects.values('refdate').order_by().distinct()
2021-05-16