2016-10-28 4 views
0

나는 아래의 다음 업데이트 문이 :많은 수의

UPDATE [dbo].[mytable] 
SET [originaldate] = 
CASE 
    WHEN [datecolumn1] <= [datecolumn2] THEN datecolumn3 
    ELSE [datecolumn1] 
END 

행의 260 만 거의 5 분 동안 실행이 문. 이 쿼리를 최적화 할 수있는 방법이 있습니까?

열이 datetime이지만 실행 시간이 동일하기 때문에이 CONVERT(date, [datecolumn2])과 같이 date 열을 변환하려고 시도했습니다.

또한 필자는 임시 테이블에 필요한 열과 ID를 넣으려고했으나 여전히 성능이 좋지 않습니다.

답변

0

로깅 및 트랜잭션 오버 헤드로 인해 테이블의 모든 행을 업데이트하는 데 시간이 걸립니다. 이 속도가 더 빠를 수도 있습니다.

select t.* 
into #temp 
from mytable; 

truncate table mytable; 

insert into mytable(col1, . . ., originaldate) 
    select . . ., 
      (CASE WHEN [datecolumn1] <= [datecolumn2] THEN datecolumn3 
       ELSE [datecolumn1] 
      END) 
    from #temp; 
+0

어쩌면 당신은 어떤 상황을 사용할 수 없다고 말할 수 있습니다. 예를 들어, 키 제약이 있거나 자동 증가 필드 (ID를 꺼야합니다)를 가지고 있습니다. 감사합니다. – Prisoner

+0

나는 이것을 시도해 볼 수는 있지만 나의 관심은 제약과 정체성이다. 또한, 내 테이블에 열이 많이 있습니다. –

+0

@GeraldGonzales. . . 신분은'identity_insert'로 부지런히 움직여야합니다. 제약 조건은 특성에 따라 다릅니다. –

2

왜 시간이 걸리면 중요합니까? 이것은 당신이 정기적으로해야하는 것처럼 보이지 않습니다.

그것이 경우에 당신이 computed column

또는 응용 프로그램 논리, 뷰 또는 상황에 따라 SELECT 문을 사용하는 것이 좋습니다.

+0

계산 된 열에 대한 작은 예는 답안에서 훌륭합니다. 혼자 링크를 추천하는 것은 좋은 답변이 아닙니다. (비록 그것이 어떤 형태의 답을 구성한다고해도). 이 관점에 대한 자세한 내용은 [여기] (http://meta.stackexchange.com/q/8231/273645)를 참조하십시오. –