PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

PostgreSQL:count() oder Zähler behalten?

Vielleicht werden Sie entgegen der Intuition feststellen, dass das einfache count Ansatz ist schneller, es sei denn, Ihre Arbeitslast ist stark auf Lesevorgänge ausgerichtet.

Der Grund dafür ist, dass der Effekt der Zählertabelle darin besteht, Aktualisierungen zu serialisieren, also nur eine Transaktion, die einen bestimmten foo aktualisiert kann jederzeit im Flug sein. Das liegt daran, dass das Update für den Trigger, der den Zähler aktualisiert, diesen foo sperrt den Eintrag von in der Zählertabelle und gibt ihn erst frei, wenn die Transaktion rückgängig gemacht oder festgeschrieben wird.

Schlimmer noch, wenn Ihre Transaktion mehr als einen foo betrifft und eine andere auch, besteht eine hohe Wahrscheinlichkeit, dass eine der Transaktionen aufgrund eines Deadlocks abgebrochen wird.

Halten Sie sich an eine einfache Zählung, bis Sie einen guten Grund haben, sie zu ändern.