비슷한 주제에서 보았던 대부분의 질문은 테이블에 삽입 속도를 높이는 방법과 관련이 있습니다.SQL Server 2005에서 삭제 속도를 향상 시키시겠습니까?
삭제 속도를 높이려면 어떻게해야합니까? 나는 절단하거나 테이블을 삭제할 수 없습니다
, 나는
DELETE FROM table WHERE id IN (SELECT id FROM other_table)
비슷한 주제에서 보았던 대부분의 질문은 테이블에 삽입 속도를 높이는 방법과 관련이 있습니다.SQL Server 2005에서 삭제 속도를 향상 시키시겠습니까?
삭제 속도를 높이려면 어떻게해야합니까? 나는 절단하거나 테이블을 삭제할 수 없습니다
, 나는
DELETE FROM table WHERE id IN (SELECT id FROM other_table)
합니까 "테이블"에 비슷한 수행 "ID"열에 인덱스를 가지고 있나요?
그렇지 않으면 SQL Server는 테이블 검색을 수행하여 삭제할 레코드를 찾습니다. "id"열에 색인을 생성하여 속도를 높일 수 있습니다.
"other_table"과 동일 - 해당 테이블의 선택에 WHERE 절도 있으면 해당 테이블에서 사용되는 열의 색인이 생성되는지 확인하십시오.
사례에 따라 특별한 도움이 필요하지 않습니다.
일반 규칙 (해당하는 경우) :
한 번에 1000 개 레코드와 같이 작은 배치로 삭제하십시오. 실제 삭제는 약간의 시간이 걸릴 것입니다 (필요한 인덱스가 제자리에 있는지 확인하십시오). 장기 실행 삭제가 실행되는 동안 사용자가 테이블에서 잠기지 않습니다.
따라야 할 몇 가지 일반적인 아이디어.
그 외에도 천천히 일으키는 원인에 대한 주관적인 추측입니다. 가장 좋은 방법은 사물을 시도하고 도움이되는 것과 느린 것을 만드는 것, 삭제가 호출 될 때 행의 항목을 찾는 방법을 이해하고 거기에서 가장 오래 걸리는 것을 보는 것입니다.
예 :
SELECT 'Starting'
WHILE ROWCOUNT <> 0
DELETE TOP (1000000) T
FROM table T
WHERE EXISTS (
SELECT * from otherTable OT WHERE T.id = OT.id
)
일부 영감 아마도 : Bulk DELETE on SQL Server 2008과 7 billion row delete