我分析了一段处理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 --在重写代码之前,我可以去掉许多结构吗?
发布于 2015-04-09 15:59:57
如果有这么多的in记录,您可以将查询简化为:
if not c.waves.filter(id__exact=obj.wave.id).exists(): pass # do something
https://stackoverflow.com/questions/29543234
复制相似问题