Seite 1 von 1

django model optimieren / primary key ändern?

Verfasst: Dienstag 18. August 2009, 18:59
von jens
Ich hab in PyLucid v0.9 eine IP ban liste erstellt und frage mich gerade ob das model nicht ein wenig optimiert werden sollte. Gerade sieht es so aus (gekürzt):

Code: Alles auswählen

class BanEntry(models.Model):
    createtime = models.DateTimeField(default=datetime.datetime.utcnow)
    ip_address = models.IPAddressField()
Auf Geschwindigkeit sollte die Tabelle darauf optimiert sein, heraus zu finden ob die aktuelle IP existiert oder nicht.

Ich denke in jedem Fall macht es wohl Sinn beim "ip_address" Feld ein db_index=True und unique=True einzufügen.

Aber wäre es vielleicht noch besser/schneller die ip_address als primary_key zu nutzten?

Was meint Ihr?

Verfasst: Dienstag 18. August 2009, 21:25
von sma
Im Zweifel messen. Das ist besser als Raten. Aber ich rate, dass es bei einer DB egal ist, ob es ein Index wegen primary key oder ein anderer eindeutiger Index ist.

Wenn du den PK nicht als FK in anderen Modellen brauchst, würde ich wohl den üblichen Integerwert einsparen und direkt die IP benutzen.

Stefan

Verfasst: Mittwoch 19. August 2009, 09:39
von jens
sma hat geschrieben:Wenn du den PK nicht als FK in anderen Modellen brauchst, würde ich wohl den üblichen Integerwert einsparen und direkt die IP benutzen.
Ne, FK habe ich nicht. Ich probiere das mal ;)

Verfasst: Mittwoch 19. August 2009, 11:55
von frabron
Zumindest in Postgresql ist ein PK auch nix anderes als eine Kombi aus Not null und unique constraint, deshalb bringt ein PK aus der IP auch keinen Geschwindigkeitsvorteil. Das wird bei Mysql auch nicht anders sein ...