데이터베이스는 행을 업데이트해야 할 때 삭제하고 삽입합니까?


13

그래서 오늘 교수는 데이터베이스가 내부적으로 (낮은 수준에서) 업데이트해야 할 때 삭제 된 필드와 업데이트 된 필드를 삽입한다고 말합니다. 그는 이것이 모든 데이터베이스에 걸쳐 만들어 졌다고 말한 후 그것이 의미가 없다고 생각했지만 내 입장을 뒷받침 할 충분한 자원이 없다고 말하는 토론을 시작했습니다. 그는 많은 것을 알고있는 것 같지만 db가 왜 그렇게하는지 이해할 수 없습니다.

필자는 필드를 업데이트하고 해당 행에 더 많은 공간이 필요한 경우 행을 물리적으로 삭제하고 새 데이터로 끝낼 수 있음을 알고 있습니다. 그러나 예를 들어 사용 된 공간을 줄이면 왜 마지막에 삭제하고 다시 삽입합니까?

이것도 사실입니까? 장점은 무엇입니까?


1
그는 특정 유형의 데이터베이스에 대해 이야기하고 있었습니까?
톰 V - topanswers.xyz 시도

1
@TomV 그는 SQL 서버에 대해 말하기했지만 그는 다음은 .. 모든 DBS에서 다음과 같이 이루어졌다 말했다
파블로 마티아스 고메즈

답변:


16

이것도 사실입니까?

아니요, 구현 세부 사항입니다. 데이터베이스는 적절한 업데이트 를 적절히 구현할 수 있습니다 .

장점은 무엇입니까?

업데이트를 삭제 후 삽입으로 나누면 일반적으로 구현이 더 간단 해집니다. 가능한 부작용으로 는 분할 삭제 / 삽입 작업을 적절히 정렬하여 고유 인덱스에서 일시적인 키 위반피할 수있는 기능이 있습니다.

분할 업데이트 실제 위치 내 업데이트보다 약간 느리고 로그를 더 많이 생성 할 수 있습니다 (항상 가능하지는 않음).

Kin이 주석에서 언급했듯이 SQL Server의 예가 필요한 경우 다음을 참조하십시오.

또한 MVCC 구현과 관련이 있습니다. MVCC 에 관한 Wikipedia 페이지에서 언급됩니다 :

MVCC 데이터베이스가 데이터 항목을 업데이트해야하는 경우 이전 데이터를 새 데이터로 덮어 쓰지 않고 이전 데이터를 더 이상 사용하지 않는 것으로 표시하고 다른 곳에 새 버전을 추가합니다. 따라서 여러 버전이 저장되어 있지만 하나만 최신 버전입니다. 이를 통해 독자는 다른 사람에 의해 수정되거나 삭제 된 경우에도 읽기 시작했을 때 있던 데이터에 액세스 할 수 있습니다.

또한의 60 페이지를 참조하십시오 PostgreSQL의 내부 구조의 PDF를 브루스 Momjian (포스트 그레스는 MVCC를 사용)에 의해 : " UPDATE효과적인 메시지입니다 DELETE및이 INSERT."

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.