sql >> Databasteknik >  >> RDS >> PostgreSQL

Kan PostgreSQL-arrayen optimeras för join?

Nej, att lagra FK:er i en array är aldrig en bra idé för generella tabeller. Först och främst är det faktumet du nämnde i förbigående:Främmande nyckelbegränsningar för arrayelement är inte implementerade (ännu). Bara detta borde ogiltigförklara idén.

Det gjordes ett försök att implementera funktionen för Postgres 9.3 som stoppades av allvarliga prestandaproblem. Se den här tråden om pgsql-hackers.

Även om läsprestanda kan förbättras med arrayer för vissa användningsfall, sjunker skrivprestandan. Tänk på det:För att infoga, uppdatera eller ta bort ett enskilt element från en lång array måste du nu skriva en ny radversion med hela arrayen för varje ändrat element. Och jag ser allvarliga låsstridigheter framför mig också.

Om din tabell är skrivskyddad , börjar idén bli mer vettig. Men då skulle jag överväga en materialiserad vy med denormaliserade arrayer överst av en normaliserad många-till-många-implementering:

Medan du håller på kan MV inkludera alla sammanfogningstabeller och producera en platt tabell för ännu bättre läsprestanda (för typiska användningsfall). På så sätt får du referensintegritet och bra läs- (och skriv)prestanda - till bekostnad av omkostnader och ytterligare lagringsutrymme för hantering av MV.




  1. Distribuerar MySQL Galera Cluster 4.0 på Amazon AWS EC2

  2. Uppföljare Hitta tillhör Många Association

  3. Hur man får återställningsmodellen för en databas i SQL Server med T-SQL

  4. MySQL-fjärranslutning misslyckas med okänd autentiseringsmetod