Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何提高django ORM查询的性能?_Django_Performance_Postgresql - Fatal编程技术网

如何提高django ORM查询的性能?

如何提高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

我正在使用django,我正在运行一个包含210万条记录的postgresql数据库。我有一个复杂的查询,需要20秒才能运行,这需要很长时间,因为在查询中有一个聚合
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,但这是解决许多性能相关问题的方法

在注释之前是否有任何方法可以过滤记录?处理这么多的记录总是需要一些时间