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

PostgreSQL:come ottimizzare il mio database per archiviare e interrogare un grafico enorme

Immagino che sia a causa di una "densità" di record con la stessa chiave sul disco. Penso che i record con lo stesso ID siano archiviati in denso (cioè un numero limitato di blocchi) e quelli con lo stesso collegamento sono archiviati in sparse (cioè , distribuito su un numero enorme di blocchi).Se hai inserito record nell'ordine di id, questa situazione può verificarsi.

Supponiamo che:1. ci sono 10.000 record,2. sono archiviati nell'ordine come (id, link) =(1, 1), (1, 2),..., (1, 100), (2, 1)... e3. È possibile memorizzare 50 record in un blocco.

Nell'ipotesi di cui sopra, il blocco #1~#3 è costituito dai record (1, 1)~(1, 50), (1, 51)~(1, 100) e (2, 1)~(2, 50) rispettivamente.

Quando SELECT * FROM edges WHERE id=1 , devono essere caricati e scansionati solo 2 blocchi (#1, #2). D'altra parte, SELECT * FROM edges WHERE link=1 richiede 50 blocchi (#1, #3, #5,...), anche se il numero di righe è lo stesso.