PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Prestazioni del database:filtraggio su colonna rispetto a tabella separata

Questo è un problema comune nella progettazione di database:la questione se separare o "archiviare" i record che non sono più "attivi".

Gli approcci più comuni sono:

  • Tutto in una tabella, contrassegna gli ordini come "completi" a seconda dei casi. Pro:soluzione più semplice (sia dal punto di vista del codice che della struttura), buona flessibilità (ad es. ordini facili da "resuscitare"). Contro:le tabelle possono diventare piuttosto grandi, un problema sia per le query che per es. backup.
  • Archivia le cose vecchie in una tabella separata. Risolve i problemi del primo approccio, a costo di una maggiore complessità.
  • Usa la tabella con il partizionamento basato sul valore. Ciò significa logicamente (per l'applicazione) tutto è in una tabella, ma dietro le quinte il DBMS inserisce le cose in aree separate a seconda dei valori su alcune colonne. Probabilmente utilizzeresti la colonna "completo" o la "data di completamento dell'ordine" per il partizionamento.

L'ultimo approccio combina le parti buone dei primi due, ma necessita di supporto nel DBMS ed è più complesso da configurare.

Nota:

Le tabelle che memorizzano solo i dati "archiviati" sono comunemente denominate "tabelle di archivio". Alcuni DBMS forniscono persino motori di archiviazione speciali per queste tabelle (ad es. MySQL), che sono ottimizzati per consentire un rapido recupero e una buona efficienza di archiviazione, a scapito di modifiche/inserimenti lenti.