2012-06-28 4 views
1

특정 테이블에 수백만 행이 포함 된 고전적인 "영업"데이터베이스가 있습니다. 이러한 각각의 큰 테이블에는 관련 "삭제"트리거와 "백업"테이블이 있습니다.매우 큰 "delete from"문을 "where"close로 최적화해야합니까?

표는 지난 7 일 "삭제"행 계속이 백업 :

CREATE TRIGGER dbo.TRIGGER 
ON dbo.EXAMPLE_DATA 
FOR DELETE AS 
INSERT INTO EXAMPLE_BACKUP 
select getDate(), * 
from deleted 
DELETE from EXAMPLE_BACKUP 
where modified < dateadd(dd, -7, getDate()) 

: 해당 백업 테이블에 삭제 된 행을 복사하여 트리거 시작 후 수행이이 방식으로 백업에 삭제 백업 테이블의 구조는 원래 데이터 테이블 (키, 값)과 유사합니다. 유일한 차이점은 백업 테이블에 키에 통합 된 "수정 된"필드를 추가한다는 것입니다.

내 동료가 내 delete 문이 백업 테이블에 수백만 개의 행이 포함되는 즉시 시간 초과/문제가 발생하기 때문에 "루프"를 사용해야한다고 말했습니다. 그 삭제 사실 어떤 시점에서 날아 윌 것인가? 다른 방식으로해야합니까?

+0

: 여기 하나의 방법 사용하여 SQL 서버의 – Jerome

답변

3

Sybase 12.5는 테이블 파티셔닝을 지원합니다. 하드 브레이크 포인트를 사용하여 데이터를 정확히 7 일간 보존 할 수 있도록 설계 한 경우 일년 중 테이블을 분할하고 현재 데이터를 나타내는보기를 구성 할 수 있습니다. 특정 날이 지나면 시계가 틱하므로 이전 파티션을 명시 적으로자를 수 있습니다.

그냥 생각해보십시오.

http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.dc20020_1251/html/databases/X15880.htm

그렇지 않으면 루프에서 삭제하면 트랜잭션 로그를 폭파하지 않고 대량의 데이터 집합을 삭제하기위한 합리적인 방법이다. 이 관련이 있다면, 사이베이스 12.5을 사용하고

http://sqlserverperformance.wordpress.com/2011/08/13/gradually-deleting-data-in-sql-server/