1. MySQL (InnoDB)에서 인덱스와 UPDATE

MySQL의 InnoDB는 기본적으로 클러스터형 인덱스를 사용합니다. 클러스터형 인덱스란 테이블 데이터가 인덱스와 함께 정렬된다는 의미입니다. 즉, **기본 키(primary key)**에 따라 데이터가 물리적으로 정렬됩니다.

이 구조로 인해 인덱스가 설정된 특정 열에서 UPDATE가 발생할 때, 다음과 같은 일이 일어납니다:

2. PostgreSQL에서 인덱스와 UPDATE

PostgreSQL은 기본적으로 비클러스터형 인덱스를 사용합니다. 즉, 인덱스는 테이블의 데이터와는 별도로 관리되며, 데이터는 물리적으로 인덱스 순서와 상관없이 저장됩니다. 이 때문에 MySQL의 클러스터형 인덱스와 달리, 데이터 자체는 물리적으로 재정렬되지 않습니다.

그러나 PostgreSQL에서 UPDATEINSERT + DELETE처럼 처리됩니다:

3. 성능 차이

4. 결론

PostgreSQL의 비클러스터형 인덱스는 MySQL의 클러스터형 인덱스에 비해 UPDATE 작업에서 데이터 재정렬에 따른 성능 부담이 적습니다. 하지만 여전히 UPDATE 작업 시 인덱스 자체는 갱신해야 하므로, 비용이 전혀 없지는 않습니다. PostgreSQL이 MySQL에 비해 UPDATE 성능에서 유리할 수 있지만, 성능 차이는 인덱스 갯수, 데이터 크기, 트랜잭션 처리 방식 등 여러 요소에 따라 달라질 수 있습니다.

따라서 PostgreSQL에서 UPDATE가 항상 "빠르다"라고 말하기는 어렵지만, 클러스터형 인덱스가 없는 만큼 데이터 재정렬과 관련된 부담은 적다고 볼 수 있습니다.