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

PostgreSQL:count() o mantieni un contatore?

Forse controintuitivamente, probabilmente scoprirai che il semplice count approccio è più veloce a meno che il carico di lavoro non sia molto sbilanciato verso le letture.

Il motivo è che l'effetto della tabella contatore sarà quello di serializzare gli aggiornamenti, quindi solo una transazione sta aggiornando un determinato foo può essere in volo in qualsiasi momento. Questo perché l'aggiornamento per il trigger che aggiorna il contatore bloccherà quel foo ' nella tabella del contatore e non lo rilascerà fino a quando la transazione non verrà ripristinata o non verrà eseguito il commit.

Peggio ancora, se la tua transazione riguarda più di un foo e così anche un altro, hai un'alta probabilità che una delle transazioni venga interrotta a causa di un deadlock.

Attieniti a un conteggio semplice finché non hai una buona ragione per cambiarlo.