2012-02-27 3 views
1

내 클라이언트 응용 프로그램에서 데이터베이스 (SQL Server 2008 R2)에 대한 UPDATE 요청을 수행하고 완료하는 데 6 초가 걸립니다.UPDATE 작업이 6 초 걸립니다.

현재이 테이블에는 약 5 백만 개의 행이 있습니다. 여기

쿼리입니다 :

열이
UPDATE MyTable 
SET subject2 = 'information abx', dateProcessed = '2012-02-27 23:02:44' 
WHERE id = 3712028; 

: 그런 식의 데이터베이스를 조각 모음하는

[id] [int] IDENTITY(1,1) NOT NULL, 
[dateProcessed] [datetime] NULL, 
[subject2] [nvarchar](150) NULL, 

모든 방법은? :)

나는 ... 육초는 인덱스 필드로 검색 한 행을 갱신하는 정상 시간입니다

어떤 도움을 매우 높이 평가한다 생각하지 않습니다! 감사합니다,

업데이트 1 : 죄송합니다. 테이블에 인덱스가 없습니다. 나는 IDENTITY도 INDEX와 같다고 생각했습니다. 그래서 아마도 id 필드에 INDEX를 추가하거나 PRIMARY KEY로 만들어야합니다.

+1

어떤 색인 정의입니까? –

+1

인덱스 또는 트리거가 있습니까? –

+0

SSMS의 실제 실행 계획 포함 옵션을 살펴 보셨습니까? 그러면 쿼리가 왜 그렇게 느린지를 알 수 있습니다. – starskythehutch

답변

3

identity을 선언해도 인덱스가 자동으로 생성되지 않습니다. 그것을 기본 키를 선언하는 것은 수행합니다

[id] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY 

당신은이 같은 기존 데이터베이스에 제약 조건을 추가 할 수 있습니다

ALTER TABLE MyTable ADD PRIMARY KEY (id) 
+0

확률이 높다는 것이 문제라고 생각합니다. 느린 인덱스를 업데이트하는 것을 볼 수 없습니다. – ChaosPandion

+0

@ChaosPandion 단 한 줄로 된 업데이트에서 6 초를 일관되게 소비하는 것이 전체 테이블 스캔의 확실한 표시라는 데 동의합니다. – dasblinkenlight

1

를 사용하여 인덱스가 갱신 한 후 열을 subject2에 정의 또는 dateProcessed있는 경우 인덱스가 업데이트되어 느려질 수 있습니다.

이러한 필드를 자주 쿼리하지 않으면 삭제할 가치가 있습니다.

가능하면 ID 필드를 기본 키로 만드는 것이 좋습니다. 이렇게하면 인덱스와 속도가 빨라집니다.

관련 문제