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

Kan PostgreSQL-array optimeres til joinforbindelse?

Nej, at gemme FK'er i et array er aldrig en god idé til generelle tabeller. Først og fremmest er der det faktum, du nævnte i forbifarten:Fremmednøglebegrænsninger for array-elementer er ikke implementeret (endnu). Dette alene burde annullere ideen.

Der var et forsøg på at implementere funktionen til Postgres 9.3, der blev stoppet af alvorlige ydeevneproblemer. Se denne tråd om pgsql-hackere.

Mens læseydeevnen kan forbedres med arrays til visse anvendelsestilfælde, falder skriveydeevnen også. Tænk på det:For at indsætte, opdatere eller slette et enkelt element fra et langt array, skal du nu skrive en ny rækkeversion med hele arrayet for hvert ændret element. Og jeg ser også alvorlige låsestrid forude.

Hvis din tabel er skrivebeskyttet , begynder ideen at give mere mening. Men så ville jeg overveje en materialiseret visning med denormaliserede arrays ovenpå af en normaliseret mange-til-mange implementering:

Mens du er i gang, kan MV inkludere alle sammenføjningstabeller og producere en flad tabel for endnu bedre læseydelse (til typiske brugstilfælde). På denne måde får du referentiel integritet og god læse- (og skrive-) ydeevne - på bekostning af overhead og ekstra lagerplads til styring af MV.




  1. Enhver grund til GROUP BY-klausul uden aggregeringsfunktion?

  2. Sådan registreres brugerformular med alle dynamiske felter navn i php

  3. MySQL-forespørgsel, der finder værdier i en kommasepareret streng

  4. Sådan fremhæves poster eller værdier i en Microsoft Access-rapport ved hjælp af betinget formatering