sql >> Database >  >> RDS >> PostgreSQL

Wat is de definitie van secundaire index in postgresql?

Er is een gebrek aan precisie in de definities van primaire en secundaire indices.

Twee populaire universitaire teksten als referentie gebruiken:

Fundamentals van databasesystemen, Elmasri en Navathe definieert ze als:

Databasesystemen:het complete boek, Garcia-Molina et. al definieert ze als:

Enkele eigenschappen die gelden voor beide bovenstaande definities:

  • primaire sleutels kunnen primaire indices zijn
  • er kan maximaal 1 primaire index per tabel zijn
  • primaire indices bepalen op unieke wijze waar een record in fysieke opslag wordt bewaard.
  • Alle andere indices zijn geclassificeerd als secundair.

Als de plaatsing van records in het gegevensbestand echter door geen enkel veld wordt bepaald, kan er geen primaire index worden gemaakt.

Dus voor gesorteerde bestanden is het logisch om te praten over de primaire index (dat zou de lijst met velden zijn waarop de sortering is gebaseerd). Ik kan geen andere voorbeelden vinden van fysieke bestandsstructuren waar een primaire index kan worden geconstrueerd.

Postgresql gebruikt een heapstructuur voor de fysieke opslag van records. Hoopjes worden niet gesorteerd (woordspeling:ze zijn gesorteerd). Daarom worden zelfs de primaire sleutels geïmplementeerd met secundaire indices, en als zodanig zijn alle indices in Postgresql secundair.

Andere RDBMS-systemen doen opslagformaten implementeren die primaire indices ondersteunen:

De taal in de Postgres-documentatie is onnauwkeurig.

Dit is waar.

Dit is niet de reden waarom alle indices secundair zijn in Postgresql. Primaire indices kunnen ook apart van het hoofdgegevensgebied van de tabel worden opgeslagen.



  1. Kan geen nieuwe tabel maken na DROP SCHEMA public

  2. GROUP BY en COUNT met ActiveRecord

  3. voeg alle rijen kolommen samen in een enkele kolom van samengevoegde tabel

  4. Zoekrelevantie in volledige tekst wordt gemeten in?