2017-11-10 3 views
2
내가 고유 인덱스하여 단일 행를 업데이트하고

:SQL 업데이트 단일 행, Where 절

UPDATE Users SET Enabled=1 WHERE Id=1 

그것은 이미 Enabled 있는지 확인하기 위해 실행 속도에 대한 의미가 있습니까?

UPDATE Users 
SET Enabled=1 
WHERE Id=1 
    AND Enabled<>1; -- if column is defined as NOT NULL 

시나리오 :

UPDATE Users SET Enabled=1 WHERE Id=1 AND Enabled<>1 
+1

특별히 RDBMS를 지정해야합니다. – Andrew

+1

정의한 색인은 무엇입니까? 예를 들어 id에 정의 된 색인이 있지만 활성화되지 않은 색인이있는 경우 두 번째 방법은 더 빠르지 않습니다. – Hogan

+0

Id는 고유 색인이며 사용 가능하지 않습니다 (0 또는 1 중 하나 일 수 있음) – Molochnik

답변

1

내가 멱등 SQL 스크립트를 작성하려 그림자/역사 테이블에 기록

  • 트리거를
  • (한 번만 실행됩니다) 최종 업데이트 날짜 (한 번만 변경됨)
  • 변경 내용 추적으로 인해 행이 업데이트 됨으로 표시되지 않습니다
  • 어쩌면 느리지 만 더 일관된가 데이터베이스 엔진을 기반으로 변화 어떻게 행동하는지
+0

추가 절을 사용하면 SQL을 더 느리게 만들 수 있습니까? 더 빠르지 않습니까? 상당한 숫자 (20 % -80 %)의 사례에서 행이 업데이트되지 않는다고 가정 할지라도. 내 시나리오가 될 시나리오가 없다는 것을 알았 기 때문에 Enabled가 가능한 한 빨리 1이되도록해야합니다. – Molochnik