0
이 쿼리는 트랜잭션 로그를 25GB로 증가시킵니다. 데이터베이스가 SIMPLE 모드입니다.트랜잭션 로그 크기를 제어하기위한 쿼리 크기 제한
INSERT INTO updbl.dbo.PopulationRelatives
(personid,
personsex,
relativeid,
relativesex,
degree,
relationship,
maternalpaternal)
SELECT DISTINCT
personid = relative1,
relative1sex,
relative2,
relative2sex,
degree,
relationship = Rel1Rel2,
maternalpaternal
FROM UPDBwork.dbo.DegreeRelationship
루핑을 통해 8GB로 성장을 제한 할 수있었습니다.
SELECT @PID = 0, @BatchSize = 1000000, @ROWCOUNT = 0
SELECT @MaxPID = MAX(relative1) FROM updbwork.dbo.DegreeRelationship
WHILE @PID < @[email protected]
BEGIN
INSERT INTO updbl.dbo.PopulationRelatives
(personid,
personsex,
relativeid,
relativesex,
degree,
relationship,
maternalpaternal)
SELECT DISTINCT
personid = relative1,
relative1sex,
relative2,
relative2sex,
degree,
relationship = Rel1Rel2,
maternalpaternal
FROM UPDBwork.dbo.DegreeRelationship
WHERE relative1 BETWEEN @PID+1 AND @[email protected]
SET @PID = @PID + @BatchSize
CHECKPOINT
END
각 루프가 DISTINCT 값에 따라 다른 수의 행을 생성하므로 최적의 전략은 아닙니다. 불행히도 데이터를 분할 할 좋은 ID가 없습니다. 각 그룹의 크기를 제어 할 수있는 방법이 있습니까? TOP (X)를 추가하려고 생각했지만 엔진은 여전히 DISTINCT 문을 충족시키기 위해 큰 계산을 수행해야합니다. 커서가 좋지만 다시 DISTINCT 값을 찾는 방법은 무엇입니까? 나는 단지 뇌가 여기에 몰려 오기를 바라고있다. 감사합니다. .