2012-10-28 2 views
2

SQL Server 2008에서는 삭제해야 할 수백만 개의 데이터 행이 있습니다. 그들은 한 줌의 테이블에 흩어져 있습니다. 삭제는 느려지는 방법이라고 생각하는 최대 20 초가 걸립니다! 삭제할 데이터는 timestamp 열로 식별됩니다. 다음은 지금까지 최적화를 위해 수행 한 작업입니다.데이터웨어 하우스 데이터에서 많은 행을 빠르게 삭제

  • 격리 수준 read uncommitted을 사용하십시오. 나는 거래를 신경 쓰지 않는다. 실패 할 경우 사용자는 삭제 작업을 다시 실행합니다. 그리고 새로운 데이터는 timestamp을 삭제하지 않도록 보장됩니다.
  • 상위 테이블보다 리프 테이블을 삭제하는 중입니다.
  • timestamp 열은 PK 클러스터 된 인덱스의 일부로, 실제로는 PK/인덱스의 첫 번째 위치입니다.
  • 각 테이블은 트랜잭션 로그 오버 헤드를 줄이기 위해 상위 200000 개 항목을 삭제하는 루프를 사용하여 비 웁니다.
  • 어느 I/O 나 CPU는 무엇 내가 간과 한 서버

에 끝나가는 무엇입니까?

또한 PK의 첫 번째 위치로 타임 스탬프 열을 이동하는 효과에 의문이 있습니다. 그렇게 한 후에는 테이블을 재구성하거나 SQL Server에서이 작업을 수행 할 수있을만큼 똑똑해야합니다. 클러스터 된 인덱스에 대한 나의 이해는 행의 실제 레이아웃을 정의하기 때문에 데이터를 재구성해야한다는 것입니다. 그러나 우리는 클러스터 된 인덱스 작업을 변경하는 데 오랜 시간이 걸린다는 고객의 불만이 없습니다.

+0

왜 이러한 요구를 수행합니다 create table myTable (ID int PRIMARY KEY) 그 외에도

, 성능에 도움이됩니다 "옵션 (재 컴파일)"를 추가하려고하시기 바랍니다 빨리 될까? 파티셔닝을 고려 했습니까? – Mat

+0

필자의 이해로는 몇 초가 걸리는 삭제 작업이 잘못되었다는 것이 었습니다. 따라서 제 생각은 제가 간과 한 것입니다. –

+2

삭제는 비용이 많이 드는 작업입니다. 수백만 줄의 20 대가 그것의 얼굴에 "틀린"것 같지는 않습니다. – Mat

답변

0

데이터를 삭제하려는 테이블에 "기본 키"가 구체적으로 표시되어 있는지 확인하십시오.

잘못된 : create table myTable (ID int)

사실 :

DELETE FROM myTable 
WHERE timestamp in (select timestamp from other_table) 
OPTION (RECOMPILE) 
관련 문제