Django多对多的性能问题

时间:2015-04-09 15:51:05

标签: django performance

我已经分析了一段代码,用于处理350行的Excel电子表格,大约200行。 75.5%的时间用于这个多对多的呼叫:

332       388    117059833 301700.6     75.5                      if obj.wave not in c.waves.all():

以下是其余的大部分内容:

136        97       341749   3523.2      0.2                      q.waves.add(obj.wave)
137        97     30551176 314960.6     19.7                      q.save()
波是一个模型, obj有一个外键字段来传播

wave = models.ForeignKey(Wave)

和q有多对多的波场

waves = models.ManyToManyField(Wave)

我检查过很多桌子,每个场都有一把钥匙。我已经将它从ISAM改为Innodb而没有任何区别。

我能做些什么来提高性能 - 它目前每行需要20秒,并在2核linux盒子上使用所有CPU - 在我重写代码以摆脱多对多结构之前?

1 个答案:

答案 0 :(得分:3)

如果in条记录太多,waves操作可能会非常昂贵,您可以将查询简化为:

if not c.waves.filter(id__exact=obj.wave.id).exists(): pass # do something