너무 느려, 한 번이 processed=1
저장 프로 시저는 (사용 커서) 내가 서버 2 (연결된 서버 사용) 서버 1에서 처리되지 않은 (<code>processed=0</code>) 레코드를 삽입 할 수있는 아래의 코드를
으로 업데이트해야 삽입
INSERT INTO SELECT FROM WHERE processed=0
UPDATE processed=1 WHERE processed=0
질의 2 :
을 그냥검색어 1을 사용했다 데이터베이스의 모든 오류가있을 경우, 그것은 영향을 미칠 것이기 때문에 내가 검색어 1 멀리 (1 개 기록 업데이트를 30 초 소요)
DECLARE pending_records CURSOR LOCAL FOR
SELECT FROM WHERE processed=0
OPEN pending_records
FETCH NEXT FROM pending_records INTO @UniqueID
WHILE @@FETCH_STATUS=0
BEGIN
INSERT INTO SELECT FROM WHERE [email protected]
IF @@ROWCOUNT=1 .... UPDATE processed=1 WHERE [email protected]
FETCH NEXT FROM pending_records INTO @UniqueID
END
CLOSE pending_records
DEALLOCATE pending_records
쿼리 1은 슈퍼 빠른 및 쿼리 사용하여 커서가 너무 느립니다 기록. 참고 : 추가 설정이 필요하므로 지금 당장 DISTRIBUTED TRANSACTION
을 사용할 수 없습니다.
'INSERT INTO FROM WHERE'... 테이블 이름은 우리가 당신에게서 여전히 그들을 두려워하는 경우 구성 될 수 있습니다. 적어도 컴파일 할 수있는 샘플을 함께 사용하면됩니다. –
@ZoharPeled 할 수 있습니다. 지금 막 IF @@ ROWCOUNT = 1 .... UPDATE processed = 1 WHERE UniqueID = @ UniqueID없이 400 개의 레코드를 완성하는 데 단 3 초가 걸렸습니다. 업데이트 명령을 사용하면 약 15 분이 걸립니다 (400 레코드 용) – Rauf
질문을 편집하여 이해할 수있는 코드를 볼 수 있습니다. 또한 테이블이 어떤 서버에 있는지 알면 도움이 될 것입니다. –