0

何らかの理由でこの行:

val = queryset.latest('attr').attr

以下よりも大幅に遅く動作します。

obj = queryset.latest('attr')
val = obj.attr

私が取り組んでいるajaxビューで。この動作は驚くほど一貫しており、このパフォーマンスの低下を引き起こす舞台裏の悪い魔法があるのではないかと考えています (ベンチマークでは ~2 秒ではなく ~20 秒)。

セットアップ: Django 1.4.3、Python 2.7.3、Windows で PyCharm を介して
デバッグ

4

1 に答える 1

0

1 回だけアクセスする場合attr、2 つのクエリの間に顕著な違いはないはずです。

ただし、次のコードに注意してください。

val = queryset.latest('attr').attr
val = queryset.latest('attr').attr
val = queryset.latest('attr').attr

毎回データベースからオブジェクトをフェッチするため、3 つのデータベース クエリが発生します。queryset.latest('attr') をオブジェクトに割り当てると、データベース クエリは 1 つだけになります。

obj = queryset.latest('attr')
val = obj.attr
val = obj.attr
val = obj.attr
于 2013-10-29T10:53:22.433 に答える