MySQL은 MVCC 동작을 할 때 versioning을 해서 Undo Log에 기록하는 식으로 삭제를 진행하지만 Postgres는 MVCC를 할 때 SoftDelete와 비슷하게 논리적으로 삭제하는 방식으로 Delete 연산을 처리한다.
이에 따라서 DB에서 삭제를 하고 조회를 할 때의 성능차이가 발생하는데 조회 성능은 실제로 데이터가 사라지는 MySQL 쪽이 좀 더 빠르다. 그러나 삭제 성능은 Undo 로그를 삭제할 필요없이 Update를 하는 Postgres 쪽이 좀 더 빠르다.
Postgres는 이러한 SoftDelete 목록이 더 이상 진짜로 필요없다라고 판단(MySQL에서 Undo 로그를 삭제하는 시점)될 때, Vacuum이라는 일종의 배치 동작을 통해서 실제로 데이터들을 삭제해주게 된다.
MySQL도 Postgres처럼 REPEATABLE READ에서 Phantom Read가 발생하지 않는데 이는 Next Level Lock + Gap Lock 때문이라고 한다.