2011-08-22 2 views
1

t-sql의 일반 테이블에서 삭제에 대한 성능 조정을 보았습니다.테이블 변수에서 삭제 성능 향상

하지만 수행 할 테이블 변수의 삭제시 성능 조정이 있습니까? UserExclusionsEvaluate 실제로 CTE 그대로 줄거리, 두꺼운 도착, 그러나 나는 시도하고 (가능한 경우) 먼저 테이블 변수 주위를 최적화하는거야 :


편집

다음은 예입니다. CTE 자체는 매우 빠르게 실행됩니다. 느린 삭제 만. 그것은 현재의 화신 년대에

DELETE FROM @UsersCriteria 
FROM @UsersCriteria UsersCriteria 
WHERE UserId IN (SELECT UserID FROM UserExclusionsEvaluate WHERE PushRuleExclusionMet = 1) 

, @UsersCriteria은 다음과 같습니다

DECLARE @UsersCriteria TABLE 
(
    UserId int primary key, 
    PushRuleUserCriteriaType int 
) 

나는 비 차 등 @UsersCriteria을 시도 클러스터되지 않은 클러스터 실험했습니다.

IN에 문제가있는 것 같습니다. 하위 쿼리에서도 JOIN을 시도했습니다.


편집 :

좋은 소식! 연속 된 CTE로 suquery를 옮기는 것, 테이블 힌트를 시도하는 것 등을 포함한 SQL을 많이 사용한 후에.

테이블 변수에서 임시 테이블로 간단히 변경하면 성능이 크게 향상되었습니다.

정말로 흥미 롭습니다. 삭제가 자체적으로 잘 돌아 갔으므로 (CTE의 경우) 하위 항목이 잘 작동했습니다. 그러나 둘을 섞어서 메가 느리게 움직였다.

하위 쿼리에서 CTE를 사용할 때 최적화 프로그램을 시작할 수 없다고 생각합니까? 어쩌면 삭제와 혼합했을 때.

+0

PushRuleExclusionMet에 대한 색인이 생성되어 있습니까 (사용자 ID가 클러스터 된 것으로 가정) – gbn

+0

안녕하세요. 감사합니다. 감사합니다. PushRuleExclusionMet가 CTE에 있습니까? CTE의 열을 색인화 할 수 있습니까? –

+0

죄송합니다, 그 비트를 놓친 – gbn

답변

4

아니요.

당신은 DECLARE에서 PK를 정의되지 않는 한 어떤 수도 일 :이 테이블 변수에 대한 통계가없는 테이블 1 행에만

+0

+1 - 선언서에 PK를 지정할 수 있다는 것을 알지 못했습니다. – JNK

+0

@JNK : PRIMARY KEY 및 UNIQUE http://msdn.microsoft.com/en-us/library/ms188927.aspx – gbn

+0

@ gbn에게 감사드립니다. 나는 그것이 내 테이블 변수가 아니라 다른 모든 gubbins과 함께 있다는 느낌을 가지고 있습니다. 나는 예언을 추가했습니다. –

1

NO를 가정한다.

테이블 변수는 읽을 수 없으며 일시적입니다. 통계가 없습니다.

매우 많은 양의 데이터를 저장하지 않습니다.

테이블 변수를 삭제할 때 성능 문제를 일으킬만큼 큰 테이블 변수가있는 경우 의도하지 않은 방식으로 사용하고 있습니다. 그 데이터를 #Temp 테이블이나 실제 테이블에 넣으면 제어력이 향상됩니다.

+0

정상적인 테이블에 총을 줄 수 있습니다. 감사. 좀 더 자세한 예제를 추가했습니다. –

+0

안녕하세요 @ JNK 좋은 소식은 임시 테이블처럼 트릭을 한 것 같습니다. 당신의 도움을 주셔서 감사합니다. –

+0

@Alex는 그것을 듣고 기뻤습니다. – JNK

3

글쎄 제한된 금액이 있습니다. 그러나 테이블 변수에 큰 데이터 세트가있는 경우 더 나은 성능이 필요하면 대신 임시 테이블을 사용해야합니다.

일괄 적으로 삭제할 수도 있습니다 (한 번에 1000 개씩).

그렇지 않으면 삭제 표시를 보여 주면 부정 할 수있는 사항이 표시됩니다.

+0

배치 삭제는 실제로 힙에서 도움이 될까요? – JNK

+0

모릅니다. 시도하지 않았을 가능성이 있습니다. 현재 커서에서 한 번에 하나의 레코드를 삭제하지 않는 한 그런 다음 모든 레코드의 배치가 확실하게 빠를 것입니다. – HLGEM

+0

감사합니다. @HLGEM 좀 더 자세한 내용과 예제를 추가했습니다. –