如何提高django ORM查询的性能?
我正在使用django,我正在运行一个包含210万条记录的postgresql数据库。我有一个复杂的查询,需要20秒才能运行,这需要很长时间,因为在查询中有一个聚合如何提高django ORM查询的性能?,django,performance,postgresql,Django,Performance,Postgresql,我正在使用django,我正在运行一个包含210万条记录的postgresql数据库。我有一个复杂的查询,需要20秒才能运行,这需要很长时间,因为在查询中有一个聚合count()函数,它最终会计算150万条记录。我的申请不接受等待20秒 django ORM“查询”如下: WebRequest.objects.values('FormUrl', 'Request__Platform','Request__Ip').annotate(total=Count('Request__Ip')).orde
count()
函数,它最终会计算150万条记录。我的申请不接受等待20秒
django ORM“查询”如下:
WebRequest.objects.values('FormUrl', 'Request__Platform','Request__Ip').annotate(total=Count('Request__Ip')).order_by('-total')[:10]
我尝试使用表索引,但这几乎不能减少延迟
现在我正在考虑将数据保存在一个表中,并通过pgadmin/cronjob/task scheduler每小时重新生成一次表,例如
drop table if exists <table> tbl; select into <tabel> tbl from query;
删除表格(如果存在tbl);从查询中选择进入tbl;
我确实觉得这是一个草率的解决方案,并假设一定有更好的方法来减少时间
<> P>有没有更好的方法,或者你们认为这是一个可接受的解决方案吗?< /P> < P>如果你不需要精确的计数,你可以尝试使用PostgreSQL统计而不是计数。在这里查看更详细的检查
这需要使用原始查询而不是ORM,但这是解决许多性能相关问题的方法在注释之前是否有任何方法可以过滤记录?处理这么多的记录总是需要一些时间