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()
waveはモデルであり、objにはwaveする外部キーフィールドがあります
wave = models.ForeignKey(Wave)
qには多対多の波動場があります
waves = models.ManyToManyField(Wave)
多対多のテーブルをチェックしましたが、すべてのフィールドにキーがあります。ISAMからInnodbに変更しましたが、違いはありません。
多対多の構造を取り除くためにコードを書き直す前に、パフォーマンスを向上させるためにできることはありますか?現在、1行あたり20秒かかり、2コアのLinuxボックスですべてのCPUを使用していますか?
in
操作は非常に多く存在する場合、特別に高価なことができwaves
、レコードは、あなたがあなたのクエリをとして簡素化することができます。
if not c.waves.filter(id__exact=obj.wave.id).exists(): pass # do something
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加