PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Datenbankleistung:Filtern nach Spalte vs. separate Tabelle

Dies ist ein häufiges Problem im Datenbankdesign:Die Frage, ob Datensätze, die nicht mehr "aktiv" sind, getrennt oder "archiviert" werden sollen.

Die gebräuchlichsten Ansätze sind:

  • Alles in einer Tabelle, Bestellungen gegebenenfalls als "abgeschlossen" markieren. Vorteile:Einfachste Lösung (sowohl code- als auch strukturmäßig), gute Flexibilität (z. B. einfache „Wiederbelebung“ von Bestellungen). Nachteile:Tabellen können ziemlich groß werden, ein Problem sowohl für Abfragen als auch für z. Sicherungen.
  • Archiviere alte Sachen in einer separaten Tabelle. Löst die Probleme des ersten Ansatzes auf Kosten größerer Komplexität.
  • Tabelle mit wertbasierter Partitionierung verwenden. Das bedeutet logisch (für die Anwendung), dass sich alles in einer Tabelle befindet, aber hinter den Kulissen legt das DBMS Dinge in separate Bereiche, abhängig von den Werten in einigen Spalten. Sie würden wahrscheinlich die Spalte „abgeschlossen“ oder das „Fertigstellungsdatum der Bestellung“ für die Partitionierung verwenden.

Der letzte Ansatz kombiniert irgendwie die guten Teile der ersten beiden, benötigt aber Unterstützung im DBMS und ist komplexer einzurichten.

Hinweis:

Tabellen, die nur „archivierte“ Daten speichern, werden allgemein als „Archivtabellen“ bezeichnet. Einige DBMS bieten sogar spezielle Speicher-Engines für diese Tabellen (z. B. MySQL), die optimiert sind, um einen schnellen Abruf und eine gute Speichereffizienz auf Kosten langsamer Änderungen/Einfügungen zu ermöglichen.