我有一个包含13M行的MySQL表。我可以直接查询数据库为
SELECT DISTINCT(refdate) FROM myTable
查询耗时0.15秒,非常棒。
等效表定义为Django模型并查询为
myTable.objects.values(`refdate`).distinct()
需要很长时间。是因为之前列表中的项目太多distinct()。如何以一种不会降低一切的方式做到这一点?
distinct()
谢谢@solarissmoke提供指向的指针connection.queries。
connection.queries
我期待看到
SELECT DISTINCT refdate FROM myTable
相反,我得到了
SELECT DISTINCT refdate, itemIndex, itemType FROM myTable ORDER BY itemIndex, refdate, itemType.
然后,我查看了中定义的myTable models.py。
models.py
unique_together = (('nodeIndex', 'refdate', 'nodeType'), ) ordering = ['nodeIndex', 'refdate', 'nodeType']
从使用默认排序或ORDER_BY互动
通常,您会希望多余的列在结果中起作用,因此请清除顺序,或者至少确保仅将其限制为您也在values()调用中选择的那些字段。
因此,我尝试order_by()刷新先前定义的顺序,瞧!
order_by()
myTable.objects.values('refdate').order_by().distinct()