我正在使用django,我正在运行一个拥有210万条记录的postgresql数据库。我有一个复杂的查询,运行需要20秒,并且需要很长时间,因为在查询中有一个聚合Person::loadMultiple($children, Yii::$app->request->post());
函数,最终计算150万条记录。我的申请不能接受等待20秒。
django ORM“查询”如下:
count()
我尝试使用表索引,但这几乎没有减少延迟。
现在我正在考虑将数据保存在表中,并通过pgadmin / cronjob / task scheduler每小时重新生成一次表,例如。
WebRequest.objects.values('FormUrl', 'Request__Platform','Request__Ip').annotate(total=Count('Request__Ip')).order_by('-total')[:10]
我觉得这是一个草率的修复,并假设必须有一个更好的方法来减少时间。
有没有更好的方法,或者你们认为这是一个可接受的解决方案吗?
答案 0 :(得分:0)
如果您不需要精确计数,可以尝试使用postgresql统计数据而不是计数。请在此处查看更详细的exaplanation https://wiki.postgresql.org/wiki/Count_estimate
这需要使用原始查询而不是ORM,但这是解决许多与性能相关的问题的方法