2016-11-23 3 views
-1

Ich muss mit Beziehung Tabelle.Was ist besser? city.state.id oder city.state_id

Staat

  • id
  • Name

Stadt

  • id
  • Name
  • Zustand

Was ist besser in der Leistung?

city.state.id oder city.state_id

+0

Haben Sie versucht, einen Benchmark zu erstellen? Wurde bereits auf den Status zugegriffen? – Sayse

+0

@Sayse Kein Typ. Ich weiß nicht, wie ich Benchmark machen kann! und Staat wurde nicht zugegriffen! – Chalist

Antwort

3

city.state_id besser ist sowieso. city.state wird einen anderen Abruf aus der Datenbank tun. Sie können dies mit select_related vermeiden. Wenn Sie nur id foriegn Schlüssel benötigen, keine Notwendigkeit von select_related here.Just do city.state_id (seit Foriegn Schlüssel-ID wird in der Abfrage holen, die city Objekt gibt).

1

city.state_id ist besser als city.state.id. Weil es nur eine Abfrage statt zwei macht.

BTW, Sie können Django Debug Toolbar zum Debuggen von Abfragen verwenden.

1

das <field>_id Feld, das Sie sehen, ist die Datenbank Spaltenname

docs

Hinter den Kulissen Django anhängt „_id“ auf den Feldnamen der Datenbank Spaltennamen zu erstellen. In dem obigen Beispiel wird die Datenbanktabelle für das Automodell eine MANUFACTURER_ID Spalte

Dies bedeutet also, es nicht eine separate Abfrage zu machen braucht die Fremdschlüssel-Instanz (siehe Select a single field from a foreign key für weitere Details) abgerufen werden.

Aber vorausgesetzt, dass Sie nicht select_related oder prefetch_related

verwendet haben
+0

was ist 'select_related' Unterschied in diesem Fall? – Chalist

+0

[".... bedeutet, dass die spätere Verwendung von Fremdschlüsselbeziehungen keine Datenbankabfragen erfordert."] (Https://docs.djangoproject.com/en/1.10/ref/models/querysets/#select-related) – Sayse