문제

이러한 종류의 SQL 쿼리 성능을 향상시킬 수있는 방법이 있습니까?

INSERT
INTO ...
WHERE NOT EXISTS(Validation...)

문제는 내 테이블에 많은 데이터가있을 때 (백만 행의 행과 같은) WHERE NOT EXISTS 매우 느리면 조항. 복제 된 데이터를 삽입 할 수 없으므로이 확인을 수행해야합니다.

SQLServer 2005를 사용합니다

고마워

도움이 되었습니까?

해결책

해당 열 내에서 데이터를 조작하지 않고 인덱싱 된 열에서 검색하고 있는지 확인하십시오 (예 : 서브 스트링 등).

다른 팁

내 머리 꼭대기에서 다음과 같은 것을 시도 할 수 있습니다.

 TRUNCATE temptable
 INSERT INTO temptable ...
 INSERT INTO temptable ... 
 ...
 INSERT INTO realtable
 SELECT temptable.* FROM temptable
 LEFT JOIN realtable on realtable.key = temptable.key
 WHERE realtable.key is null

존재하지 않는 것을 왼쪽 외부 조인으로 교체하십시오. 때로는 큰 데이터 세트에서 더 잘 수행됩니다.

인덱싱에 관한 다른 답변에주의하십시오. 좋은 색인이 있으면 일반적으로 존재하지 않습니다.

그러나 나는 가지다 설명과 같은 진술에 성능 문제가있었습니다. 내가 주변에 사용했던 한 가지 방법은 후보 값에 온도 테이블을 사용하고, 삭제를 수행하는 것입니다 ... 물론 거래 내부에서는 인종 조건을 피하기 위해. 쿼리를 분할하면 때때로 Optimizer가 혼란스럽지 않고 작업을 수행 할 수 있습니다.

문제 공간을 줄일 수 있다면 많은 성능을 얻을 수 있습니다. 그 테이블의 모든 행을 확인해야한다고 확신하십니까?

당신이 시도하고 싶은 또 다른 것은 DELETE InsertTable FROM InsertTable INNER JOIN ExistingTable ON <Validation criteria> 삽입하기 전에. 그러나 마일리지는 다를 수 있습니다

insert into customers 
select * 
from newcustomers 
where customerid not in (select customerid 
                         from customers)

.. 더 효율적입니다. 다른 사람들이 말했듯이, 조회 필드에 인덱스가 있는지 확인하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top