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

Qual è la definizione di secondary index in postgresql?

C'è una certa mancanza di precisione nelle definizioni di indici primari e secondari.

Utilizzando due testi universitari popolari come riferimento:

Fondamenti di sistemi di database, Elmasri e Navathe li definisce come:

Sistemi di database:il libro completo, Garcia-Molina et. al li definisce come:

Alcune proprietà che valgono per entrambe le definizioni precedenti:

  • le chiavi primarie possono essere indici primari
  • può esserci al massimo 1 indice primario per tabella
  • Gli indici primari determinano in modo univoco dove viene conservato un record nella memoria fisica.
  • Tutti gli altri indici sono classificati come secondari.

Tuttavia, se il posizionamento dei record nel file di dati non è determinato da alcun campo, non è possibile creare un indice primario.

Quindi, per i file ordinati, ha senso parlare dell'indice primario (che sarebbe l'elenco dei campi su cui si basa l'ordinamento). Non riesco a trovare altri esempi di strutture di file fisici in cui è possibile costruire un indice primario.

Postgresql utilizza una struttura heap per l'archiviazione fisica dei record. Gli heap non vengono ordinati (avviso di gioco di parole:sono in un certo senso ordinati). Pertanto, anche le chiavi primarie vengono implementate utilizzando indici secondari e come tali tutti gli indici in Postgresql sono secondari.

Altri sistemi RDBMS lo fanno implementa formati di archiviazione che supportano gli indici primari:

La lingua nella documentazione di Postgres è imprecisa.

Questo è vero.

Questo non è il motivo per cui tutti gli indici sono secondari in Postgresql. Gli indici primari possono anche essere memorizzati separatamente dall'area dati principale della tabella.