기본 키에 클러스터 된 인덱스가있는 SQL Server 데이터베이스에 테이블이 있습니다. 테이블에는 백만 개의 행이 있습니다. 테이블에서 10K 행을 삭제하면 삭제 작업 중에 인덱스가 재구성됩니까?
삭제 작업은 저장 프로 시저의 일부입니다. 한 번에 둘 이상의 클라이언트가 저장 프로 시저를 실행할 수 있지만 각 개별 실행은 고유 한 행 집합 (기본 키로 고유하게 식별 됨)을 삭제합니다. 여러 클라이언트가 프로 시저를 실행할 때 키 잠금 (유형 U)이 차단됩니다. 블로커 잠금은 동일한 테이블의 행에 속하며 동시에 실행중인 트랜잭션의 일부가 아닙니다. 각 실행이 자체 행 집합을 삭제하려고 시도 할 때 차단이 없어야합니다. 잠금 에스컬레이션이 해제되어 있지 않습니다.
삭제 작업으로 인해 인덱스의 균형이 조정되어야하므로 재구성 프로세스 중에 테이블의 모든 행에서 키 잠금이 필요할 수 있습니다.
나는 이것에 대한 의견을 정말로 감사하겠습니다.
좋은 질문과 좋은 추측. 예, record를 삭제하면 인덱스가 다시 작성됩니다. 재 구축 프로세스 테이블이 잠기면 다른 사용자는 해당 테이블에 액세스 할 수 없습니다. stackoverflow.com/questions/6309614/…
—
KumarHarsh
아니요, 클러스터형 인덱스에서 행을 삭제해도 인덱스가 다시 작성되지 않습니다. 데이터를 삭제하는 데 사용 된 쿼리를 게시 할 수도 있습니다. 쿼리가 삭제 될 데이터를 찾으려고하면 마지막으로 행을 잠 가서 삭제합니다.
—
Shanky
삭제가 발생하면 "구멍"이 생성되거나 데이터가 클러스터형 인덱스에서 제거 될 때 공간을 말할 수 있습니다. 이로 인해 페이지 밀도가 낮아지고 조각화로 간주 될 수 있습니다. CI에서 삽입이 발생하면 오른쪽의 레코드가 채워지고 이로 인해 공간이 채워질 수 없습니다. 그러나 SQL Server는이 공간을 자동으로 제거하지 않습니다. 이 공간을 채우려면 인덱스를 다시 작성하거나 재구성해야합니다. 이와 같은 재조정은 없습니다
—
Shanky
@ jayesh 나는 트리의 노드 순서가 재조정과 어떻게 관련이 있는지 알지 못합니다. B- 트리의 균형이 맞지 않을 수 있습니다 (삽입 또는 삭제로 인해). 이 경우 노드 순서는 변경되지 않습니다. 균형이 맞지 않는 나무 일뿐입니다.
—
ypercubeᵀᴹ
@ jayesh 나는 당신이 사용하는 용어가 당신과 우리 모두를 혼란스럽게 생각하기 때문에 일부 MSSQL 문서를 읽는 것이 도움이 될 것이라고 생각합니다.
—
LowlyDBA