2010-01-08 10 views
2

약 100,000 개의 레코드가 포함 된 SQL 2000 테이블에서 다음 SQL을 사용하고 있습니다. 그것은 매우 느립니다.업데이트 SQL 쿼리 속도 향상

어떻게 속도를 높일 수 있습니까?

UPDATE [MASTER] 
    SET [STATUS] = 1 
WHERE [CODE] IN (" + *customerCodes* + ")"; 

customerCodes는 사용자가 그리드에서 고객을 확인할 수있는 UI에서 전달됩니다.

답변

1

이 쿼리를 개선하는 것부터 시작하는 가장 분명한 곳은 [MASTER] 테이블에있는 인덱스를 보는 것입니다 (테이블에 대한 훌륭한 이름은 아닙니다. 그런데 이름을 바꾸는 것이 좋습니다. generic, particulary는 SQL Server 시스템 데이터베이스를 마스터라고 부르기 때문에).

[CODE]에 색인이 있어야합니다.

다음 단계는 쿼리 실행 계획을 살펴 보는 것입니다.

SQL Server Management Studio (또는 SQL 2000의 쿼리 분석기)에는 쿼리 실행 계획을 볼 수있는 기능이 있습니다. 쿼리 분석기의 사본이 없으므로 SSMS에서 쿼리 -> 실제 실행 계획 포함을 선택하여 실행 계획을 볼 수 있습니다. 다음에 쿼리를 실행하면 쿼리가 어떻게 실행되었는지 볼 수 있습니다. 쿼리에서 항상 인덱스를 사용하고 테이블 스캔과 같은 성능이 낮은 작업을 수행하고 있지 않은지 확인해야합니다.

쿼리 실행 계획에서주의해야 할 점 중 하나는 큰 데이터 집합에 작은 실행 계획보다 다른 실행 계획이 표시되므로 큰 쿼리를 조정하려면 많은 테스트 데이터가 필요하다는 것입니다.

시도해 볼만한 가치가있는 마지막 것은 customerCodes 변수를 변환하는 것입니다 (결과는 '2, 6, 10, 5', 쉼표로 구분 된 ID 목록 임). 테이블 값 함수. 나는 이것으로 쿼리 최적화 프로그램이 더 잘 작동 할 것이라고 확신하지 못하지만, 그렇게 할 수도 있습니다.

+0

WHERE 절에 'AND [STATUS] <> 1'을 추가하면 중복 업데이트가 방지됩니다 (트리거에 의존하지 않는 한). –

0

글쎄, 가장 간단한 방법은 'where'절이 색인 된 필드를 사용하는지 확인하는 것입니다. 따라서 현재 수행중인 작업 대신 색인 된 필드 (일반적으로 ID)를 얻을 수 있도록 인터페이스를 변경해야합니다.