Hallo Michael,
Wie PostGreSQL doppelte Eintraege verwaltet, kann ich
dir leider nicht sagen. Ich koennte mir vorstellen,
dass es in jedem Hash-Element eine lin. Liste gibt.hm ... kommt wohl darauf an, wie groß der Schlüsselraum im
Vergleich zu den zu speichernden Werten ist. Wenn es
möglich und sogar wahrscheinlich ist, daß viele Werte
denselben Hashcode haben,
Moment. Doppelte Eintraege heisst, Eintraege zu haben, die
denselben Key (nicht dieselbe Hash-Summe!) haben, aber doch
unterschiedlich sind. Ein Hash-Index ist ja nicht
zwangslaeufig unique.
dann kann eine lineare Liste langsam sein. Natürlich
möchte man dann den Hash-Key gerne länger machen ...
Tatsaechlich wuerde ich persoenlich zwei Sachen machen: ab
einer bestimmten Anzahl von Dupletten (Eintraege mit
verschiedenen Keys aber denselben Hash-Summen!) die Tabelle
vergroessern, aber ansonsten einen Suchbaum benutzen. IMHO
weiss die DB genug ueber die Schluessel, um ein derart
eigenmaechtiges Handlen zu rechtfertigen.
aber wird damit die entsprechende Speichertabelle nicht
explosionsartig größer?
Ja. Im Normalfall wird um eine Zweierpotenz vergroessert, weil
die gaengigen Hash-Funktionen sonst Modulo brauchen. Und das
ist sehr, sehr langsam (im Vergleich zum Rest der
Hash-Funktion).
Gruesse,
CK