2008-12-08 7 views
9

Welches Design ist Ihrer Meinung nach bei PostgreSQL schneller?In PostgreSQL, Ist es schneller, TEXT-Spalten in der gleichen Tabelle statt einer separaten Tabelle einzubeziehen?

  1. Einen 15 Säulentisch von Varchars und dergleichen, sondern setzt alle TEXT-Spalten in einer separaten Tabelle mit einem fkey Link zurück zu dieser Tabelle. Und stellen wir uns vor, Sie möchten nach dem Datensatz mit der ID "4" suchen, dann aber alle Zeilen zurückholen, einschließlich der Daten aus den TEXT-Spalten in der verbundenen Tabelle. Stellen wir uns vor, die Tische haben 500.000 Zeilen.

  2. Erstellen Sie eine 15-spaltige Tabelle mit Varchars und dergleichen, und schließen Sie Ihre TEXT-Spalten in derselben Tabelle ein. Stellen Sie sich das Gleiche wie oben vor - greifen Sie auf die ID 4 und ziehen Sie den vollständigen Datensatz, und es gibt 500.000 Zeilen in der Tabelle.

ich meine, in den meisten Datenbanken, so wie ich es verstehe, wenn Sie gehen, um die physikalische Schicht, wie diese TEXT-Spalten arbeiten, halten sie eine kleine ID tatsächlich in der Tabellenspalte in jeder Zeile, und Diese ID wird an einen separaten, exklusiven Seitenblock (oder eine andere Nomenklatur) in der Datenbank übergeben. Für mich scheint es, dass Option B schneller läuft, weil der Aufwand für den fkey-Join nicht benötigt wird und weil die TEXT-Spalten tatsächlich nicht mehr als einen Integer-Platz in dieser Spalte in der angegebenen Tabelle belegen - und diese ganze Zahl ist ein Schlüssel in der Datenbank zu einem Seitenblock woanders.

Antwort

3

(B) ist richtig, aus dem Grund in der Frage selbst gegeben.

16

PostgreSQL behandelt TEXT-Spalten nicht auf die gleiche Weise wie andere DBMS.

Aus ihrer docs:

Tipp: Es ist keine Performance-Unterschiede zwischen diesen drei Typen, abgesehen von den erhöhten Speichergröße, wenn die Leerzeichen aufgefüllt Typen verwendet wird, und ein paar zusätzlichen Zyklen, um die Länge zu überprüfen, wenn die Speicherung in eine Spalte mit eingeschränkter Länge. Während das Zeichen (n) in einigen anderen Datenbanksystemen Leistungsvorteile aufweist, hat es in PostgreSQL keine derartigen Vorteile. In den meisten Situationen sollte stattdessen Text oder Zeichenvariation verwendet werden.

Check out the manual

+0

+1 für das Graben der genauen Wortfolge, die ich tun würde, wenn ich die Frage zu lesen! – some