我有一个包含13M行的MySQL表。我可以直接查询db
SELECT DISTINCT(refdate) FROM myTable
查询需要0.15秒,非常棒。
定义为Django模型并查询为
的等效表myTable.objects.values(`refdate`).distinct()
需要很长时间。是因为distinct()
之前列表中的项目太多了。我怎么做的方式不会让一切都失望?
答案 0 :(得分:1)
感谢@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()
答案 1 :(得分:0)
你可以试试这个:
myTable.objects.all().distinct('refdate')