2011-04-28 2 views
3

으로 변환 한 후 문제 "text"유형의 PersonDescription 열이있는 Person이라는 테이블이있었습니다. 이 칼럼을 업데이트에 문제가 그래서 난 ALTER TABLE dbo.Person ALTER COLUMN PersonDescription VARCHAR (최대)은테이블 열을 "텍스트"에서 Varchar (최대)

이 VARCHAR (최대) 될 수있는 열을 변경하는 스크립트를

를 실행했다. 이것은 모두 좋았고 즉시 도망 쳤다. 그러나 이제는 언제든지이 열을 업데이트하려고 할 때마다 실행하는 데 3-4 분이 걸리는 것으로 나타났습니다. 쿼리

업데이트 사람이 업데이트가 즉시 실행 한 후 실행 한 후 PersonDescription = '사람 설명'personid = 18

을 설정합니다. 이것은 모두 괜찮지 만이 변경 사항이 생산 단계로 넘어갈 때이 테이블에는 백만 개의 레코드가 있으므로 로그인 할 때마다 모든 사람이 시간 초과 될 것입니다. 아무도 내가 이것을 막을 수있는 방법을 말해 줄 수 있습니까? 거기에 다른 스크립트 등 내가 실행해야합니다. 업데이트를 실행 한 후 Statman이 sqlserver에서 실행되는 것을 보았습니다. sqlserver는 시간이 걸리는 것입니다.

감사 니얼

+2

일회성 작업 일 뿐인 통계를 자동 생성하는 경우. 쿼리를 컴파일하는 동안 시간 초과가 발생하면 어떻게 될지 잘 모릅니다. 그 쿼리는'PersonDescription' 칼럼에 어떤 통계도 필요하지 않아야하는 것처럼 보입니다. 'personid'에 대해서만 –

+0

Martin에게 답해 주셔서 감사합니다. 필자는 하나의 단일 레코드에 대해 새로운 수정 된 열을 업데이트하는 배포 스크립트를 만들어이 문제를 해결할 수있었습니다. 이렇게하면 첫 번째 사용자가 시스템에 로그인하기 전에 통계가 업데이트되므로 원치 않는 문제가 발생하지 않습니다. 감사. – Somedeveloper

+0

이전에 null 인 필드에서 텍스트를 varchar (max)로 변경했을 때 SQL Server에서 발견 된 버그와 관련이 있는지 궁금합니다. http://stackoverflow.com/questions/10295771/why-is-is-not-null-returning-null-values-for-a-varcharmax-in-sql-server. 우리는 UPDATE Person과 같은 SQL을 사용하여 그것을 고쳤습니다. SET PersonDescription = PersonDescription – Colin

답변

0

그것은 문제가 그것이 BLOB 또는 행에 데이터를 저장해야하는 경우 계산 SQL 서버로 인한 것이 제 생각입니다.

참조 :

Using varchar(MAX) vs TEXT on SQL Server는 "VARCHAR (MAX) 형식이 텍스트를 대체는 기본적인 차이가 TEXT 유형은 항상 VARCHAR (MAX) 반면 BLOB에 데이터를 저장하려고 시도를 입력하는 것입니다. 8k 제한을 초과하지 않는 한 해당 데이터를 행에 직접 저장하고 그 시점에서 BLOB에 저장합니다. "

전체 텍스트 색인을 사용하고 있습니까? 인덱스 비활성화, 업데이트, 인덱스 다시 작성.

새 테이블을 만들고 레코드를 복사 해 보았습니까? 여전히 동일한 성능 문제가 있습니까?

관련 문제