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