SQL - Split eine große Tabelle nach wie oft sie zugegriffen werden? - SQL, PostgreSQL

Ich habe eine Tabelle mit 50 Feldern:

  1. 10 Felder, die fast immer benötigt werden.
  2. 40 Felder, die sehr selten benötigt werden.

Ich würde grob sagen, dass die Felder in (1) 1000 Mal häufiger aufgerufen werden müssen als die Felder in (2).

Sollte ich sie in zwei Tabellen mit Eins-zu-Eins-Beziehung teilen oder alle in derselben Tabelle behalten?

Antworten:

1 für die Antwort № 1

Der Prozess, den Sie beschreiben, ist manchmalbezeichnet als "vertikale Partitionierung". Im Extremfall (eine Spalte pro vertikale Partition) speichern Spalten-Datenbanken Daten. Unglücklicherweise unterstützt Postgres derzeit nicht direkt die vertikale Partitionierung.

Ihre Idee, die Daten in zwei Tabellen aufzuteilen, ist in Ordnung. Ich würde folgendes bemerken:

  • Sie müssen Abfragen ändern, die die zusätzlichen Spalten verwenden, um die zweite Tabelle zu verwenden. (Sie können die join in eine Ansicht, die Sie verwenden, wenn Sie die zusätzlichen Spalten benötigen.)
  • Wenn beide Tabellen einen gruppierten Primärschlüssel haben, der sie verbindet, dann wird der join sollte wirklich schnell sein.
  • Wenn Sie Daten einfügen / aktualisieren / löschen, müssen Sie bei der Synchronisation vorsichtig sein. Ich denke du kannst damit umgehen INSTEAD OF Auslöser für eine Ansicht, die die Tabellen kombiniert.
  • Wenn einige Datensätze keine zusätzlichen Spalten enthalten, kann dies ein großer Gewinn auf der Space-Seite sein.
  • Wenn alle Datensätze und alle Spalten in den Cache geladen werden, ist das wahrscheinlich kein großer Gewinn.

Dies kann unter Umständen ein großer Leistungsgewinn sein. Aber es gibt zusätzliche manuelle Arbeit, um die Tabellen synchronisiert zu halten.


0 für die Antwort № 2

Es gibt wirklich nicht annähernd genug Informationen hier zu schätzen (eigentlich egal quantifizieren) Was sind die Vorteile, aber die Kosten sind sehr klar - komplexer Code, ein komplexeres Schema, wahrscheinlich eine höhere Gesamtnutzung des Speicherplatzes und ein Leistungsaufwand beim Hinzufügen und Entfernen von Zeilen.

Eine Leistungsverbesserung könnte von kommenScannen einer kleineren Datenmenge beim Durchführen eines vollständigen Tabellenscans oder aus einer erhöhten Wahrscheinlichkeit, Datenblöcke im Speicher nach Bedarf zu finden, und einem insgesamt geringeren Speicherbedarf, jedoch ohne spezifische Informationen zu den üblicherweise durchgeführten Vorgängen und zum Server unter Gedächtnisdruck steht, kann kein zuverlässiger Rat gegeben werden.

Seien Sie sehr vorsichtig, wenn Sie Ihr System als Nebeneffekt ungewisser Leistungsgewinne komplexer machen.


Speisekarte