0

ich ein Modell haben, wie unten gezeigt,Abfrage ein Objekt mit pk vs benutzerdefinierte object_id

class Person(models.Model): 
    first_name = models.CharField(max_length=30) 
    middle_name = models.CharField(max_length=30, blank=True) 
    last_name = models.CharField(max_length=30) 
    person_id = models.CharField(max_length=32, blank=True) 

wo die person_id auf speichern bevölkert ist, die eine zufällige Hexstring von uuid erzeugt, die so etwas wie 'E4DC6C20BECA49E6817DB2365924B1EF' aussehen würde

so meine Frage ist, in einer Datenbank mit einer großen Größe von Objekten, wird die Abfragen

Person.objects.get(pk=10024) 

(pk) vs (person_id)

Person.objects.get(person_id='E4DC6C20BECA49E6817DB2365924B1EF') 

Keinerlei des Verfahrens wird ein Leistungsvorteil in großem Umfang von Daten?

Ich bin nicht sehr bewusst, die Datenbank Interna.

Meine Datenbank ist postgresql

+0

Dies sieht relevant aus (für mysql, aber es gibt einige allgemeine Kommentare in den Antworten): [Gibt es einen echten Leistungsunterschied zwischen INT und VARCHAR Primärschlüssel?] (Http://stackoverflow.com/questions/332300/is -there-a-real-Leistungsdifferenz-zwischen-int-und-varchar-Primärschlüssel – solarissmoke

Antwort

0

gute Leistung Um von einer Spalte in einer Datenbank abfragt, muss es indiziert werden. Die Primärschlüsselspalte wird automatisch indiziert (per Definition), aber Ihre person_id wird nicht; Fügen Sie der Deklaration db_index=True hinzu und führen Sie anschließend Migrationen durch.