sql >> Database >  >> RDS >> PostgreSQL

Kan PostgreSQL-array worden geoptimaliseerd voor join?

Nee, het opslaan van FK's in een array is nooit een goed idee voor tabellen voor algemene doeleinden. Allereerst is er het feit dat u terloops noemde:Foreign key-beperkingen voor array-elementen zijn (nog) niet geïmplementeerd. Dit alleen zou het idee ongeldig moeten maken.

Er was een poging om de functie voor Postgres 9.3 te implementeren die werd gestopt door ernstige prestatieproblemen. Zie deze thread op pgsql-hackers.

Ook, terwijl de leesprestaties kunnen worden verbeterd met arrays voor bepaalde gebruikssituaties, kelderen de schrijfprestaties. Denk er eens over na:om een ​​enkel element uit een lange array in te voegen, bij te werken of te verwijderen, moet je nu een nieuwe rijversie schrijven met de hele array voor elk ingekort element. En ik zie ook serieuze slotconflicten in het verschiet.

Als uw tabel alleen-lezen is , begint het idee logischer te worden. Maar dan zou ik een gematerialiseerde weergave overwegen met gedenormaliseerde arrays bovenaan van een genormaliseerde veel-op-veel-implementatie:

Terwijl hij bezig is, kan de MV alle join-tabellen opnemen en één platte tabel produceren voor nog betere leesprestaties (voor typische gebruiksgevallen). Op deze manier krijg je referentiële integriteit en goede lees- (en schrijf-) prestaties - ten koste van de overhead en extra opslagruimte voor het beheer van de MV.




  1. Wat is de beste manier om een ​​substring-zoekopdracht in SQL te implementeren?

  2. Wachtgebeurtenissen SQL Server -2

  3. Controleren of een bepaalde datum tussen een reeks datums past

  4. Hoe Oracle DMP-bestanden te gebruiken?