Django查询中oring Q对象的性能影响

2024-03-29 10:12:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在执行一个查询,这是一个或一群Q在一起,似乎要花很多时间。这是一些psuedo代码

query_params = []
for i in range(80): #there are about 80ish Q objects being created
    query_params.append(Q(filter_stuff))

然后我或他们都在一起

^{pr2}$

当我执行查询时

query = list(MyModel.objects.filter(query_params))

它挂了很长时间。我知道这是一个非常普遍的问题,如果不深入了解数据结构,很难做出诊断(在这里很难给出)。但我只是想知道django查询中的或Q对象是否有内在的性能影响


Tags: 代码inforobjects时间rangeparamsfilter
1条回答
网友
1楼 · 发布于 2024-03-29 10:12:59

通过减少Q对象的数量,可以显著缩短查询的长度。它们的格式都像:

q1 = Q(field1=field1_val1, field2=field2_val1)
q2 = Q(filed1=field1_val2, field2=field2_val2)
#...etc

按字段1分组

^{pr2}$

然后我的q对象看起来像这样:

for field1_val, field2_vals = q_dict.items():
    query_params.append(Q(field1=field1_val, field2__in=field2_vals))

这最终大大减少了Q对象的数量,查询运行得更快

相关问题 更多 >