Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.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
Python 为什么这个带有浮点除法的Django查询注释如此缓慢?_Python_Django_Postgresql - Fatal编程技术网

Python 为什么这个带有浮点除法的Django查询注释如此缓慢?

Python 为什么这个带有浮点除法的Django查询注释如此缓慢?,python,django,postgresql,Python,Django,Postgresql,我有一个带有子查询的查询,并用派生计算进行注释: base\u query=PlayerReport.objects.filter( #…一些过滤条件 ) #在基本查询上创建一个求和,以便稍后加入 points=base\u query.filter(pk=OuterRef('pk'))。注释( 分数=总和(“球员比赛分数”) ) 价格=PlayerPrice.objects.filter( 玩家报告=OuterRef('pk') )。订购人(“-日期”) #要计算的最后一个查询 final\u

我有一个带有子查询的查询,并用派生计算进行注释:

base\u query=PlayerReport.objects.filter(
#…一些过滤条件
)
#在基本查询上创建一个求和,以便稍后加入
points=base\u query.filter(pk=OuterRef('pk'))。注释(
分数=总和(“球员比赛分数”)
)
价格=PlayerPrice.objects.filter(
玩家报告=OuterRef('pk')
)。订购人(“-日期”)
#要计算的最后一个查询
final\u query=base\u query.annotate(
#玩家的总积分总和
点=子查询(
points.value('points')
输出\字段=浮动字段()
)
#最新玩家价格
价格=子查询(
价格。价值(‘价格’)[:1]
输出\字段=浮动字段()
)
#这会造成巨大的性能损失
每点价格=_分区价格('点','价格')
#_division_exp用于其他派生计算
#这些不会导致明显的性能问题
派生字段2=\u分区\u exp('field1','field2')
派生字段3=\u分区\u exp('field3','field4')
)
_division_exp是一个方便的助手方法,它帮助我们创建一个防止零除法的表达式

def\u division\u exp(num\u键、denom\u键):
回程箱(
当(**{denom_key:0,'then':0})时,
默认值=ExpressionWrapper(
F(数字键)/F(数字键),
输出\字段=浮动字段()
)
)
这个除法助手有很多用途,但只有
每点价格
会导致任何类型的问题

在我的本地计算机上观察到的查询性能为:

每点价格
:~9s

使用
每点价格
:~16s

我已经重复了很多次了,我确信我已经指出了问题的原因

我还尝试在postgres控制台中粘贴原始查询,可以观察到相同的效果

在我的注释中,此分区与其他分区的区别在于,此分区使用两个子查询的结果,而其他分区则不使用(一个除外,它在数字和中使用

为什么会出现这种情况,查询是否可以优化