실제로 변경되는 데이터 양에 따라 다릅니다. 이 테이블에 20 개의 열이 있다고 가정하겠습니다. 또한 각각 diff에 5 개의 색인이 있습니다. 기둥.
이제 20 개 열 모두의 값이 변경되거나 5 개 열의 데이터가 변경되고이 5 개 열이 모두 색인화 된 경우에도 "삭제 및 삽입"이 더 나을 수 있습니다. 그러나 2 개의 열만 변경되어 클러스터되지 않은 인덱스의 일부가 아니라고 말할 경우이 경우 클러스터 된 인덱스 만 업데이트되므로 인덱스를 업데이트하지 않는 것이 좋습니다. 업데이트).
추가 연구에서, SQL Server에는 내부적으로 UPDATE를 수행하기위한 두 가지 별도의 메커니즘이 있으므로 위의 의견은 중복되는 것으로 나타났습니다. - "현재 위치 업데이트"(예 : 원래 행에서 열 값을 새로운 것으로 변경) 또는 "제자리 비 업데이트"(DELETE 뒤에 INSERT).
적절한 업데이트가 규칙이며 가능한 경우 수행됩니다. 여기서 행은 같은 페이지에서 같은 범위에서 같은 위치에 정확하게 유지됩니다. 영향을받는 바이트 만 변경됩니다. tlog에는 하나의 레코드 만 있습니다 (업데이트 트리거가없는 경우). 힙이 업데이트되고 페이지에 충분한 공간이있는 경우 업데이트가 수행됩니다. 클러스터링 키가 변경되었지만 행을 전혀 이동할 필요가없는 경우에도 업데이트가 이루어집니다.
예를 들어,성에 클러스터형 인덱스가 있고 이름이 Able, Baker, Charlie 인 경우 Baker를 Becker로 업데이트하려고합니다. 행을 이동할 필요가 없습니다. 그래서 이것은 제자리에 걸릴 수 있습니다. 반면 Able을 Kumar로 업데이트해야하는 경우 행이 같은 페이지에 있더라도 행을 이동해야합니다. 이 경우 SQL Server는 DELETE와 INSERT를 차례로 수행합니다.
위의 사항을 고려하여 정상적인 업데이트를 수행하고 SQL Server가 내부적으로 수행하는 가장 좋은 방법을 찾도록 제안합니다.
"업데이트"내부 또는 SQL Server 관련 내부에 대한 자세한 내용은 Paul Randal 's 등의 Kalen Delaney 등의 SQL Server 2008 내부를 참조하십시오 .