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

时间:2015-10-27 03:38:08

标签: python mysql sql django

我有一个包含13M行的MySQL表。我可以直接查询db

SELECT DISTINCT(refdate) FROM myTable

查询需要0.15秒,非常棒。

定义为Django模型并查询为

的等效表
myTable.objects.values(`refdate`).distinct()

需要很长时间。是因为distinct()之前列表中的项目太多了。我怎么做的方式不会让一切都失望?

2 个答案:

答案 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')