Django 查询中 or-ing Q 对象的性能影响
Performance impact of or-ing Q objects in django query
我正在执行一个将一堆 Q 组合在一起的查询,这似乎要花费很多时间。这是一些伪代码
query_params = []
for i in range(80): #there are about 80ish Q objects being created
query_params.append(Q(filter_stuff))
那我或者他们一起
query_params = reduce(or_, query_params)
当我执行查询时
query = list(MyModel.objects.filter(query_params))
它挂了很长时间。我知道这是一个非常普遍的问题,如果不深入了解数据结构(这在此处很难给出),就很难给出诊断。但我只是好奇在 django 查询
中是否存在 or-ing Q
对象的固有性能影响
能够通过减少 Q
对象的数量来显着缩短查询的长度。它们都是这样的格式:
q1 = Q(field1=field1_val1, field2=field2_val1)
q2 = Q(field1=field1_val2, field2=field2_val2)
#...etc
我最终按 field1 值对它们进行了分组:
q_dict = {field1_val1: [all field_2 values paired with field1_val1], ...}
然后我的 q 个对象看起来像这样:
for field1_val, field2_vals = q_dict.items():
query_params.append(Q(field1=field1_val, field2__in=field2_vals))
这最终 sh运行k 显着减少了我的 Q
对象数量并且查询 运行 快得多
我正在执行一个将一堆 Q 组合在一起的查询,这似乎要花费很多时间。这是一些伪代码
query_params = []
for i in range(80): #there are about 80ish Q objects being created
query_params.append(Q(filter_stuff))
那我或者他们一起
query_params = reduce(or_, query_params)
当我执行查询时
query = list(MyModel.objects.filter(query_params))
它挂了很长时间。我知道这是一个非常普遍的问题,如果不深入了解数据结构(这在此处很难给出),就很难给出诊断。但我只是好奇在 django 查询
中是否存在 or-ingQ
对象的固有性能影响
能够通过减少 Q
对象的数量来显着缩短查询的长度。它们都是这样的格式:
q1 = Q(field1=field1_val1, field2=field2_val1)
q2 = Q(field1=field1_val2, field2=field2_val2)
#...etc
我最终按 field1 值对它们进行了分组:
q_dict = {field1_val1: [all field_2 values paired with field1_val1], ...}
然后我的 q 个对象看起来像这样:
for field1_val, field2_vals = q_dict.items():
query_params.append(Q(field1=field1_val, field2__in=field2_vals))
这最终 sh运行k 显着减少了我的 Q
对象数量并且查询 运行 快得多