2016-04-29 16 views
0

私はDjangoバックエンドのパフォーマンスを最適化しようとしています。私はDjango Simple History(https://django-simple-history.readthedocs.io/en/latest/)で追跡するモデルユーザーを持っています。履歴の削除を伴うDjango一括更新

自分のユーザーモデルを一括更新して履歴から削除したいと考えています。個々のユーザーの場合、これは次のようになります。

u = User.objects.get(id=user_id) 
u.name = "new name" 
u.save() 
u.history.first().delete() # I don't want to track this change. 

パフォーマンスに優れていますか?

オプション1:

users = User.objects.filter(needs_updating=True) 
for user in users: 
    user.name = "New name" 
    user.save() 
    user.history.first().delete() 

オプション2:

User.objects.filter(needs_updating=True).update(name="new name") 
User.history.filter(name="new name").delete() 

答えて

1

すべてに対するオプション#2のnここで、n =更新しneeds_updatingnameフィールドはフラグが設定されていると仮定必要があるユーザーの数db_indexであるか、またはデータベース内で索引付けされています(テストし、正常に動作していることを前提とします)。

私の数:オプション1はデータベースに対して1 + 2 * nのクエリを行い、オプション2は常にデータベースに対して2つのクエリを行います。