Compare

Side-by-side on the decisions that recur: index vs scan, normalize vs denormalize, optimistic vs pessimistic, partition vs shard, and more — with when to choose each.

Read CommittedSerializable
SnapshotFresh per statementPer transaction + dependency tracking
Anomalies allowedNon-repeatable, phantom, lost update, write skewNone
ThroughputHighestLower; aborts (40001) under contention
RetriesNot neededRequired — 40001 is normal operation
WhenOrdinary requests with self-contained statementsCorrectness depends on a condition you read but did not write
Choose this whenThe default. Most application code, with atomic statements (SET x = x + 1, INSERT … ON CONFLICT, FOR UPDATE).Invariants no single constraint can express — and only with a retry loop; serialise hot rows with a lock instead.