2012-04-17 2 views
1

새로운 프로세스가 시작됩니다. 50 개 이상의 테이블에 2 백만 개가 넘는 행이 포함됩니다. 프로세스가 For/For 각 상자에서 반복됩니다. 안으로, 테이블은 다른 procceses를 겪을 것이다. 기본 업데이트 (가장 많이 호출되는 것은 중복을 찾는 삭제입니다). 결국 우리는 모든 업데이트가 완료된 50 개 테이블의 전체 내용으로 새 테이블을 갖게 될 것입니다.루프 튜닝을위한 SQL

내 질문은 : 속도면에서 모든 루프 동안 테이블에서 중복을 찾는 것이 더 나은가? 또는 전체 결과를 확인하는 프로세스가 끝날 때 전체 삭제를 수행하는 것이 더 좋습니까? 작업량은 거의 같습니다.

고마워요.

EDIT.

자세한 정보

루프가 필요합니다. 이 50 개의 테이블은 두 개의 다른 서버에 있습니다. 오라클과 액세스. 루프는 로컬 SQL 서버에서 루프를 채우는 것입니다. 모든 인구 (루프)에서 나는 업데이트를하고 테이블을 작업하므로 준비가 완료됩니다.

우리가 테이블에서 수행하는 작업이 루프 내에서 실행되었거나 외부에서 실행되면 더 빠르다는 것이 문제입니다.

감사합니다.

+0

루핑하지 않고 세트에서 작업하는 것이 더 좋습니다. – HLGEM

+0

@HLGEM - 항상? 트랜잭션 로그 오버 헤드를 줄이기 위해 작은 글씨로 큰 글을 쓰는 것이 좋을 때가 있습니다. – MatBailie

+0

@Dems 한 번에 하나의 레코드를 반복 할 때 항상 그런 것은 아니지만 사실상 항상 항상 그렇습니다. . 터프한 배치를 루핑하는 경우에는 종종 좋은 생각입니다. – HLGEM

답변

1

은 단일 성명처럼 들립니다.

또한 왜 비정규 화가 중간에 발생합니까?

+0

일단 전체 프로세스가 완료되면 어떻게 될지에 대한 작은 복제본을 시도했습니다. 그냥 2 테이블을 사용합니다. 루프 내에서 첫 번째 삭제. 그것은 3.5 초 걸렸다. 루프 후 2 초. 4.2 초 걸렸다. 내가 임의의 테이블을 선택했기 때문에 랜덤 한 시간인지 또는 어떤 종류의 표시인지는 알 수 없습니다. 50 개의 테이블이 포함 된 후 몇 분이 걸릴 수 있으므로 ID는 당분간 비정규 화를 시작하기를 원합니다. 물론 가능하다면 –

+0

루프를 작성해서는 안된다는 느낌이들 것입니다. SQL 문. 아마도 몇 가지 예제 테이블, 데이터 및 원하는 결과를 보여주기 위해 질문을 편집하십시오. 그러면 비교할 좋은 SQL 문을 얻을 수 있습니다. – Randy